Java-处理流介绍 装饰模式分析
原创约 1075 字大约 4 分钟...
装饰模式分析.md
141-Java-处理流介绍&注意
本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。
- 处理流
- 只用字节或是字符为单位来对数据做输入输出是不够的,有时候我们需要一行一行的读数据,有时我们需要读取特定格式的数据,因此Java提供了这样的机制,能把数据流作连接(chain),让原本没有特殊访问方法的流,通过连接到特殊的流后,变成可以用特定的方法来访问数据

“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能
处理流类的构造函数中,都必须接收另外一个流对象作为参数
处理流类
种类\继承体系 | 字节 | 字符 |
---|---|---|
缓冲(Buffered) | BufferedInputStream, BufferedOutputStream | BufferedReader, BufferedWriter |
字符和字节转换 | InputStreamReader,OutputStreamWriter | |
对象序列化 | ObjectInputStream,ObjectOutputStream | |
特定数据类型访问 | DataInputStream, DataOutputStream | |
计数 | LineNumberInputStream | |
重复 | PushbackInputStream | |
打印 | PrintStream | PrintWriter |
- 常见处理流类 — 缓冲流(Buffered)
- 缓冲流对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法
- Java提供了四种缓冲流,其构造方法
构造方法 | 含义 |
---|---|
BufferedInputStream(InputStream in) | 创建了一个带有32字节缓冲区的缓冲输入流 |
BufferedInputStream(InputStream in, int size) | 创建了一个带有size大小缓冲区的缓冲输入流 |
BufferedOutputStream(OutputStream out) | 创建了一个带有32字节缓冲区的缓冲输出流 |
BufferedOutputStream(OutputStream out,int size) | 创建了一个带有size大小缓冲区的缓冲输出流 |
- Java提供了四种缓冲流,其构造方法
构造方法 | 含义 |
---|---|
BufferedReader(Reader in) | 创建一个使用默认大小输入缓冲区的缓冲字符输入流 |
BufferedReader(Reader in,int size) | 创建一个使用size大小输入缓冲区的缓冲字符输入流 |
BufferedWriter(Writer out) | 创建一个使用默认大小输入缓冲区的缓冲字符输出流 |
BufferedWriter(Writer out,int size) | 创建一个使用size大小输入缓冲区的缓冲字符输出流 |
常见处理流类 — 缓冲流(Buffered)
- 缓冲流中的方法
- BufferedInputStream支持其父类的mark和reset方法
- BufferedWriter提供了readLine方法用于读取一行字符串(以\r或\n分隔)
- BufferedWriter提供了newLine方法用于写入一个行分隔符
- 对于BufferedOutputStream和BufferdWriter,写出的数据会先在内存中缓存,使用flush()方法将使内存中的数据立刻写出
- 缓冲流中的方法
自动资源管理
- 在JDK 7之前,我们需要使用一个finally块,来确保资源确实被释放掉,不管try块是完成了还是中断了。比如说读取文件或者输入流的时候,我们需要在finally块中关闭它们;而在Java 7里面,你可以使用try-with-resource的特性来自动关闭资源,只要是实现了AutoClosable和Closeable接口的都可以,几乎所有的资源类型都实现了Closeable接口,并重写了close()方法。JDK 7引入了try-with-resource语句,来确保每个资源在语句结束后都会调用AutoClosable接口的close()方法进行关闭。
try(BufferedReader reader = new BufferedReader(new FileReader("路径"));) {
//...
} catch(Exception e) {
e.printStackTrace();
}
示例代码如下:
package 装饰模式;
public interface MyInputStream {
public int read();
}
package 装饰模式;
public class MyFileInputStream implements MyInputStream {
public MyFileInputStream() {
}
@Override
public int read() {
System.out.println("MyFileInputStream read()");
return 0;
}
}
package 装饰模式;
public class MyBufferedInputStream implements MyInputStream {
private MyInputStream in;
public MyBufferedInputStream(MyInputStream in) {
this.in = in;
}
@Override
public int read() {
in.read();
System.out.println("MyBufferedInputStream 开辟缓冲区read()");
return 0;
}
}
package 装饰模式;
public class Test {
public static void main(String[] args) {
new MyBufferedInputStream(new MyFileInputStream()).read();
}
}
测试结果如下:
MyFileInputStream read()
MyBufferedInputStream 开辟缓冲区read()
分割线
相关信息
以上就是我关于 Java-处理流介绍&装饰模式分析 知识点的整理与总结的全部内容,另附源码
Powered by Waline v2.15.4