现在的位置: 首页 > 综合 > 正文

java中的I/O流小结

2013年10月26日 ⁄ 综合 ⁄ 共 1371字 ⁄ 字号 评论关闭

java.io包中约有75个类和接口。 java.io包设计的目的是处理数据和对象的IO操作。程序员需要使用java.io包把数据写到磁盘文件,套接子,URL,以及系统控制台上,并从中读取输入数据。java.io包也支持字符串数据的格式化处理,以及zip和jar文本处理。

java中的I/O操作大量采用包装处理,因此需要执行两到三个类才能实现简单的I/O处理。

所谓包装(wrapper)就是通过其他对象才能访问自己特性的对象。包装对对象将会增强或改善被包装对象的可用性。Java I/O库广泛采用此技术。包装是一种设计模式,这种设计模式也成为“装饰”(decorator)设计模式。java中的流采用包装主要是提高读取或者输出数据的效率。

java中有两种流,字节流和字符流。每种流又分为输入流和输出流。那么在进行I/O操作时候如何选择使用字节流还是字符流呢?

以输出为例,主要从一下三个方面解决

1.确定输出内容是否包含任何字符。如果包括字符,是输出16位编码的字符还是输出8位编码的字符?

如果在美国或欧洲打印一个报表,也许需要选用8位编码的字符输出。如果有一个使用了16位Unicode字符的数据库,则应选用16位编码的字符输出。注意在做出选择时不应该破坏数据。

1)选用8位编码的字符输出时,应用OutputStream(默认情况)

2)选用16位编码的字符输出时,应用Writer类。

2. 确定数据输出的目的

JAVA程序访问外部数据是通过数据流实现的。大多数物理输出目的都有一个专门的底层类可用

基于输出目的和数据宽度确定底层类
输出目的 输出8位字符的OutputStream类或方法 输出16位字符的Writer类
文件 java.io.FileOutputStream java.io.FileWriter
套接子 java.net.Socket.getOutputStream() 套接子从不使用16位编码的数据流
URL(GET/POST) java.net.URLConnection.getOutputStream() URL建立在套接子基础上,所以无
管道 java.io.PipedOutputStream java.io.PipedWriter
内存中的数组 java.io.ByteArrayOutputStream java.io.CharArrayWriter

3. 确定输出数据类型,二进制数据?还是可打印的数据?

根据二进制数据,ASCII字符和字符串输出之间的不同确定顶层类
类型 格式 十六进制数值 用到的类
二进制数据 4字节的二进制整数   java.io.DataOutputStream
ASCII字符 连续的字节  

java.io.PrintOutputStream

字符串 连续的双字节字符   java.io.PrintWriter

我们把这一步选用的类成为顶层类。

举个例子

假定有一个数组,其中包含1000个整数值,我们想以二进制数据形式把它们写到一个文件中代码如下

FileOutputStream fos = new FileOutputStream("ints.dat");

DataOutputStrea dos = new DataOutputStream(fos);

for (int i=0;i<1000;i++){

dow.writeInt(myArray[i])

}

dos.close();

抱歉!评论已关闭.