Java中IO流之序列流,内存流

伙伴们

今天我们来看一下

序列流和内存流

序列流

1)什么是序列流

序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时, 将从被整合的第一个流开始读, 读完一个之后继续读第二个, 以此类推.

需求:

现在我们需要把两个TXT文件的内容读取到一个文件中来。

之前的解决方式方式:

利用序列流来整合两个文件:

SequenceInputStream(InputStream, InputStream)

序列流整合多个?(利用枚举)

SequenceInputStream(Enumeration)

内存流

在进行某个操作时必须使用IO操作,又不希望有一些临时文件产生,那么就无法使用之前的文件操作流。

为解决问题,提供了内存操作流——即对内存进行操作的终端,以发生IO操作关系。

下面就来看一下

ByteArrayInputStream

ByteArrayOutputStream

内存流的特点:

1)用于操作字节数组的流对象,其实它们就是对应设备为内存的流对象。 

2)该流的关闭是无效的,因为没有调用过系统资源。

3)按照流的读写思想操作数组中元素。 

下面来做一个小练习

定义一个文件输入流,调用read(byte[] b)方法,将a.txt文件中的内容打印出来(byte数组大小限制为5)

总结

关于IO流的知识点小结:

1)流是用来处理数据的。

2)处理数据时,一定要先明确数据源与数据目的地。

3)流只是在帮助数据进行传输,并对传输的数据进行处理,比如过滤处理、转换处理等。

数据所在的设备:

1)源设备:

键盘(System.in)

硬盘(FileXXX)FileReader FileInputStream

内存(数组)ByteArrayInputStream CharArrayReader StringReader

网络(Socket)

2)目的设备:

显示器(控制台System.out)

硬盘(FileXXX)FileWriter FileOutputStream

内存(数组)ByteArrayOutputStream CharArrayWriter StringWriter

网络(Socket) 

是否需要额外功能?

1) 是否需要高效?

缓冲区Buffered (字符与字节各两个)

2) 是否需要转换?

转换流  

InputStreamReader OutputStreamWriter

3) 是否操作基本数据类型?

数据流 

DataInputStream  DataOutputStream

4) 是否操作对象(对象序列化)? 

对象流

ObjectInputStream ObjectOutputStream 

5) 需要对多个源合并吗?

序列流

SequenceInputStream

6) 需要保证数据的表现形式到目的地吗? 

打印流

PrintStream 或 PrintWriter 

那么IO流的知识就到这里了

伙伴们再见了

微信公众号:javafirst

扫码关注免费获取更多资源 

猜你喜欢

转载自blog.csdn.net/xiamiflying/article/details/81702103