java文件操作---IO

字节输入/输出流的介绍

字节流 所在包 作用
InputStream/OutputStream java.io 抽象类
ByteArrayInputStream/ByteArrayOutputStream java.io 字节数组输入/输出流
FileInputStream/FileOutputStream java.io 文件输入/输出流
SequenceInputStream java.io SequenceInputStream类可以将几个输入流串联在一起,合并为一个输入流
PipedInputStream java.io 管道输入/输出流,让多线程可以通过管道进行线程间的通讯
FilterInputStream/FilterOutputStream java.io 过滤器字节输入/输出流
ObjectInputStream/ObjectOutputStream java.io 对象的序列化流
BufferedInputStream/BufferedOutputStream java.io 缓冲输入/输出流
PushbackInputStream java.io PushbackInputStream可以预览下一个字节,不需要时可以推回流中
DataInputStream/DataOutputStream java.io 是两个与平台无关的数据操作流
PrintStream java.io 打印流可以打印任意类型的数据,而不用先转化为字符类型
AudioInputStream javax.sound.sampled 用于音频的流
CheckedInputStream/CheckedOutputStream java.util.zip
InflaterInputStream/DeflaterInputStream java.util.zip
CipherInputStream/CipherOutputStream javax.crypto 对数据进行加密/解密的流
DigestInputStream/DigestOutputStream java.security 对数据进行加密/解密的流
ProgressMonitorInputStream javax.swing 监视读取某些 InputStream 的进度
LineNumberInputStream java.io 已废弃
StringBufferInputStream java.io 已经废弃

字符输入/输出流

字符流 作用
Reader/Writer java.io 字符读写的抽象类
CharArrayReader/CharArrayWriter java.io 字符数组输入/输出流,操作的数据是以字符为单位
PipedReader/PipedWriter java.io 字符管道输入/输出流,作用是可以通过管道进行线程间的通讯
FilterReader/FilterWriter java.io 字符过滤流与 字节过滤流的原理一致,都是通过操作要过滤的流本身的方法来实现。不同就是字符过滤流是抽象类,而字节过滤流不是
StringReader/StringWriter java.io 字符串输入/输出流其本质就是字符串
BufferedReader/BufferedWriter java.io 缓冲字符输入/输出流
PushbackReader java.io PushbackInputStream可以预览下一个字符,不需要时可以推回流中
LineNumberReader java.io LineNumberReader可以支持从任意行读取的功能
FileReader/FileWriter java.io 文件字符输入/输出流
InputStreamReader/InputStreamWriter java.io 转换流,将字节流转换为字符流
PrintWriter java.io 字符类型的打印输出流

FilterInputStream/FilterOutputStream

FilterInputStream/FilterOutputStream类及其子类可以动态给流对象添加功能(利用了装饰者模式),例如:

1
2
3
4
5
6
//组合FilterInputStream子类和非FilterInputStream子类
DataInputStream data = new DataInputStream(new FileInputStream("hello.txt"));
//组合FilterInputStream子类和FilterInputStream子类时,要注意顺序,最后构造的类的方法最后使用
DataInputStream data1 = new DataInputStream(new BufferedInputStream(new FileInputStream("hello.txt")));

BufferedInputStream data2 = new BufferedInputStream(new DataInputStream(new FileInputStream("hello.txt")));

Zip

AudioInputStream

音频输入流是具有指定音频格式和长度的输入流。长度用示例帧表示,不用字节表示。提供几种方法,用于从流读取一定数量的字节,或未指定数量的字节。音频输入流跟踪所读取的最后一个字节。可以跳过任意数量的字节以到达稍后的读取位置。音频输入流可支持标记。设置标记时,会记住当前位置,以便可以稍后返回到该位置。

ByteArrayInputStream

ByteArrayInputStream 是字节数组输入流。它继承于InputStream。
它包含一个内部缓冲区,该缓冲区包含从流中读取的字节;通俗点说,它的内部缓冲区就是一个字节数组,而ByteArrayInputStream本质就是通过字节数组来实现的

FileInputStream

SequenceInputStream

可以把多个输入流串联起来读取,先从第一个开始i读取,然后再下一个….
序列流是没有读取文件的能力

https://www.jianshu.com/p/0f746f184a4f

StringBufferInputStream

已废弃

PipedInputStream

https://www.cnblogs.com/skywang12345/p/io_04.html

管道输入流。它的作用是让多线程可以通过管道进行线程间的通讯

FilterInputStream

https://www.cnblogs.com/xinhuaxuan/p/6054219.html

FilterInputStream、FilterOutputStream 过滤器字节输入流、输出流,这里用到了装饰器模式,它的主要用途在于给一个对象动态的添加功能。

ObjectInputStream

ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。如果流是网络套接字流,则可以在另一台主机上或另一个进程中重构对象。

只能将支持 java.io.Serializable 接口的对象写入流中
https://blog.csdn.net/chaoyu168/article/details/49766485

BufferedInputStream

BufferedInputStream 是缓冲输入流。它继承于FilterInputStream。
BufferedInputStream 的作用是为另一个输入流添加一些功能,例如,提供“缓冲功能”以及支持“mark()标记”和“reset()重置方法”。
BufferedInputStream 本质上是通过一个内部缓冲区数组实现的。例如,在新建某输入流对应的BufferedInputStream后,当我们通过read()读取输入流的数据时,BufferedInputStream会将该输入流的数据分批的填入到缓冲区中。每当缓冲区中的数据被读完之后,输入流会再次填充数据缓冲区;如此反复,直到我们读完输入流数据位置。

http://www.cnblogs.com/skywang12345/p/io_12.html

CheckedInputStream

CheckedInputStream和CheckedOutputStream
这是两个过滤流,用于维护数据校验和。校验和是用于维护数据完整性的一项技术。

CipherInputStream

CipherInputStream是由InputStream和一个Cipher组成,read()方法在读入时,对数据进行加解密操作

https://blog.csdn.net/zmken497300/article/details/51918109

DigestInputStream

MD5加密文件

InflaterInputStream

此类实现了一个流过滤器,用于以“deflate”压缩格式解压缩数据。它还用作其他解压缩过滤器的基础,例如GZIPInputStream。

LineNumberInputStream

跟踪输入流中的行号;可调用getLineNumber()和setLineNumber(int)

PushbackInputStream

PushbackInputStream
具有“能弹出一个字节的缓冲区”。因此可以将读到的最后一个字符回退
通常作为编译器的扫描器,之所以包含在内是因为Java编译器的需要,我们基本上用不到

DataInputStream

与DataOutputStream搭配使用,因此我们可以按照可移植方式从流读取基本数据类型(int,char,long等)
包含用于读取基本类型数据的全部接口

ProgressMonitorInputStream

监视读取某些 InputStream 的进度。大致用以下形式调用此 ProgressMonitor:

1
2
3
4
5
InputStream in = new BufferedInputStream(
new ProgressMonitorInputStream(
parentComponent,
"Reading " + fileName,
new FileInputStream(fileName)));12345

这可以创建一个进度监视器,以监视读取输入流的进度。如果需要一段时间,将会弹出 ProgressDialog,以通知用户。如果用户单击 Cancel 按钮,则在进行下一次读取操作时会抛出 InterruptedIOException。当关闭流时,会执行所有的正确清除。

https://blog.csdn.net/zmken497300/article/details/51924434

PrintStream

https://www.jianshu.com/p/88e576067f53

打印流可以打印任意类型的数据。

DeflaterOutputStream

https://www.cnblogs.com/kabi/p/6169430.html

Reader

CharArrayReader

CharArrayReader 是字符数组输入流。它和ByteArrayInputStream类似,只不过ByteArrayInputStream是字节数组输入流,而CharArray是字符数组输入流。CharArrayReader 是用于读取字符数组,它继承于Reader。操作的数据是以字符为单位!

PipedReader

PipedWriter 是字符管道输出流,它继承于Writer。
PipedReader 是字符管道输入流,它继承于Writer。
PipedWriter和PipedReader的作用是可以通过管道进行线程间的通讯

http://www.cnblogs.com/skywang12345/p/io_20.html

FilterReader

字符过滤流(FilterReader/FilterWriter)与 字节过滤流(FilterInputStream / FilterOutputStream )的原理一致,都是通过操作要过滤的流本身的方法来实现。
不同就是字符过滤流是抽象类,而字节过滤流不是

StringReader

本篇将要讲述的是java io包中的StringReader和StringWriter。这两个类都是Reader和Writer的装饰类,使它们拥有了对String类型数据进行操作的能力。

https://blog.csdn.net/moonfish0607/article/details/78320363

BufferedReader

BufferedReader 是缓冲字符输入流。它继承于Reader。
BufferedReader 的作用是为其他字符输入流添加一些缓冲功能。

http://www.cnblogs.com/skywang12345/p/io_23.html

PushbackReader

这里将 PushbackInputStream 和 PushbackReader 放到一起讨论主要是二者的原理机制几乎一模一样,掌握其一即可。它们分别表示 字节推回流、字符推回流。

https://blog.csdn.net/u012420654/article/details/51549393

LineNumberReader

LineNumberReader可以支持从任意行读取的功能,并且提供了setLineNumber()的方法,但是这个按照并不能改变文件指针的位置,只是你调用getLineNumber()这个函数时,结果会变

http://www.cnblogs.com/jokerSun/p/4172833.html

FileReader

InputStreamReader

转换流-InputStreamReader、OutputStreamWriter

https://www.cnblogs.com/zhaoyanjun/p/6376996.html

PrintWriter

PrintWriter 是字符类型的打印输出流,它继承于Writer。
PrintStream 用于向文本输出流打印对象的格式化表示形式。它实现在 PrintStream 中的所有 print 方法。它不包含用于写入原始字节的方法,对于这些字节,程序应该使用未编码的字节流进行写入。

https://www.cnblogs.com/skywang12345/p/io_25.html