目录
2.1. FileInputStream/FileOutputStream
2.2. ByteArrayInputStream/ByteArrayOutputStream
2.3. ObjectInputStream/ObjectOutputStream
2.4. PipedInputStream/PipedOutputStream
2.5. FilterInputStream/FilterOutputStream
2.6. DataInputStream/DataOutputStream
2.7. BufferedInputStream/BufferedOutputStream
一. 前言
字节流是按照字节的方式读取数据,一次读取一个字节,也就是8个二进制位,这种流是万能的,什么类型的文件都可以读取,包括:文本文件,图片,声音文件,视频文件等。通常如果文件能通过记事本打开,我们还可以读懂里面的内容,就使用字符流,否则使用字节流。如果不知道该使用哪种类型的流,就使用字节流。
InputStream 是所有字节输入流的父类,OutputStream 是所有字节输出流的父类;以 Stream 结尾的都是字节流;

二. 实现类
2.1. FileInputStream/FileOutputStream
FileInputStream 用于读取本地文件中的字节数据,继承InputStream类。
FileOutputStream 将字节数据写到文件,继承OutputStream类。
FileInputStream fis = new FileInputStream("d:\\aa.txt");
FileOutputStream fos = new FileOutputStream("d:\\aa.txt");
2.2. ByteArrayInputStream/ByteArrayOutputStream
ByteArrayInputStream中包含一个内部缓冲区,用来包含那些可能从流中读的字节数组。还有一个内部计数器来跟踪下一个将被读取的字节。ByteArrayInputStream只能用字节数组来进行构造。
ByteArrayInputStream bais = new ByteArrayInputStream(str.getBytes("UTF-8"));
ByteArrayOutputStream中也有一个内部缓冲区,当数据写入是缓冲区会自动增长,内部有一个计数器来记录缓冲区的字节数。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
String str="hello world";
ByteArrayInputStream bais = new ByteArrayInputStream(str.getBytes("UTF-8"));
int ch = 0;
while((ch = bais.read()) != -1) { // 读到尾部返回-1
baos.write(ch); // 一个个字节写入到baos中
}
2.3. ObjectInputStream/ObjectOutputStream
允许把内存中的java对象转换成平台无关的二进制流,从而允许把这种二进制流永久的保存到磁盘上,或通过网络将这种二进制流传输到另一个网络节点。(序列化ObjectOutputStream)
当其他程序获取了这种二进制流,就可以恢复成原来的java对象。(反序列化ObjectInputStream)
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath));
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath));
2.4. PipedInputStream/PipedOutputStream
管道流其实是一个很有魅力的流,用法也很独特。他用来连接两个线程之间的通信,比如传输文件等。它们的作用是让多线程可以通过管道进行线程间的通讯。在使用管道通信时,必须将PipedOutputStream和PipedInputStream配套使用。
2.5. FilterInputStream/FilterOutputStream
FilterInputStream和FilteOutputStream分别是过滤输入流和过滤输出流,他们的作用是为基础流提供一些额外的功能。FilterInputStream常见的子类有DataInputStream、BufferedInputStream以及PushBackInputStream等。FilteOutputStream常见的子类有DataOutputStream、BufferedOutputStream以及PrintStream等。
2.6. DataInputStream/DataOutputStream
DataInputStream和DataOutputStream可以读取或写入Java中的基本数据类型的变量或字符串。因为输入时是按顺序输入的,所以读取时也需要按顺序读取,否则会报错。
// 创建写出,读入流文件,构造器中放入节点流对象.
DataOutputStream dos = new DataOutputStream(new FileOutputStream("test.txt"));
DataInputStream dis = new DataInputStream(new FileInputStream("test.txt"));
dos.writeInt(20);
dos.writeUTF("Tom");
dos.writeChar('M');
System.out.println(dis.readInt());
System.out.println(dis.readUTF());
System.out.println(dis.readChar());
2.7. BufferedInputStream/BufferedOutputStream
BufferedInputStream: 缓冲字节输入流,是一个高级流(处理流),与其他低级流配合使用。
BufferedOutputStream: 缓冲字节输出流,是一个高级流(处理流),与其他低级流配合使用。
FileInputStream fis = new FileInputStream("demo.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
String content = null;
// 自己定义一个缓冲区
byte[] buffer = new byte[10240];
int flag = 0;
while((flag = bis.read(buffer)) != -1){
content += new String(buffer, 0, flag);
}
System.out.println(content);
FileOutputStream fos = new FileOutputStream("demo.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
String content = "我是缓冲输出流测试数据!";
bos.write(content.getBytes(), 0, content.getBytes().length);
bos.flush();
bos.close();
2.8. PushbackInputStream
PushbackInputStream给输入流增加了一个新的功能,即可以使用unread()方法将读取的字节数据推回读取的字节数据。
2.9. Zip相关流
DeflaterOutputStream和DeflaterInputStream类提供了以deflate格式压缩数据的机制。
InflaterOutputStream和InflaterInputStream类提供了以deflate格式压缩数据的机制。
CheckedInputStream和CheckedOutputStream:这是两个过滤流,用于维护数据校验和。校验和是用于维护数据完整性的一项技术。
2934

被折叠的 条评论
为什么被折叠?



