首页 » Java » JavaSe » 正文

Java基础系列10:内存操作流,管道流,合并流,压缩流以及回退流

前言:这篇文章将对几个“非主流”的IO流进行简单的介绍

一 内存操作流 

内存操作流的主要作用是完成内存的输入和输出。比如说在某些情况下需要生成一些临时信息,而将这些临时信息保存在文件中不仅要进行文件的读写而且在功能完成之后还需要删除这个临时文件,因此比较麻烦,这时或许就需要用到内存操作流了。

需要用到的API是:ByteArrayInputStreamByteArrayOutputStream,分别表示输入流和输出流,示例代码如下:

输出:

二 管道流

管道流的主要作用是可以进行两个线程之间的通信,如果要进行管道的输出,则必须把输出流连接到输入流上,需要用到的方法是:connect(PipedInputStream pipedInputStream)

需要用到的API是:PipedInputStreamPipedOutputStream,示例代码如下:

注:上面的示例代码定义了两个线程对象,分别表示管道输出流和管道输入流,在操作的时候只需要使用PipedOutputStream类中提供的connect()connect(PipedInputStream pipedInputStream)方法就可以将两个管道流连接起来,线程启动后就会自动进行管道的输入和输出操作了

三 合并流

合并流的主要功能是将两个流的内容合并到一起

需要用到的API是:SequenceInputStream,实例代码如下:

上面代码执行完毕的结果就是demo.txt文件和demo2.txt文件的内容都会合并到一个文件demo3.txt这个文件中去了

四 压缩流

在Java中可以通过压缩流将文件或文件夹压缩成ZIP,JAR或GZIP等格式,当然也可以进行反向解压缩。

有关压缩的常用几个API:

i)JAR:JarOutputStream和JarInputStream

ii)GZIP(比如说在Linux下常见的.gz格式):GZIPOutputStream和GZIPInputStream

iii)ZIP:ZipOutputStreamZipInputStream,ZipFile,ZipEntity等


下面以ZIP格式来举例说明压缩与解压缩

(1)单个文件的ZIP缩:

测试:

(2)文件夹的级联压缩

在上面的例子中举例说明了单个文件的压缩,但是我们通常可能需要将一个文件夹进行压缩,并且该文件夹中还有文件夹,比如说像这样:


这时候我们可以通过递归调用的方式来进行压缩。如果是普通文件则将文件内容压缩输出到ZipOutputStream流中,如果是文件夹则进行递归调用。完整示例代码如下:

在上面的例子的基础上继续进行测试:

测试效果如下:



(3)对件进行级联解压缩

这里以上面例子中的dir.zip文件为测试目标进行解压缩,代码不难而且关键地方我已经写了注释,因此这里就不多说了,完整代码如下:

效果如下:



五 回退流

回退流,顾名思义,可以把读取出来的某些数据重新退回到输入流的缓冲区中

需要用到的API是:PushbackInputStream,示例代码如下:

输出:

本文共 5 个回复

发表评论

*