Java-处理流介绍 装饰模式分析

涎涎原创约 1075 字大约 4 分钟...JavaJava

141-Java-处理流介绍&装饰模式分析.mdopen in new window

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

  • 处理流
    • 只用字节或是字符为单位来对数据做输入输出是不够的,有时候我们需要一行一行的读数据,有时我们需要读取特定格式的数据,因此Java提供了这样的机制,能把数据流作连接(chain),让原本没有特殊访问方法的流,通过连接到特殊的流后,变成可以用特定的方法来访问数据
  • “连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能

  • 处理流类的构造函数中,都必须接收另外一个流对象作为参数

  • 处理流类

种类\继承体系字节字符
缓冲(Buffered)BufferedInputStream, BufferedOutputStreamBufferedReader, BufferedWriter
字符和字节转换InputStreamReader,OutputStreamWriter
对象序列化ObjectInputStream,ObjectOutputStream
特定数据类型访问DataInputStream, DataOutputStream
计数LineNumberInputStream
重复PushbackInputStream
打印PrintStreamPrintWriter
  • 常见处理流类 — 缓冲流(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-处理流介绍&装饰模式分析 知识点的整理与总结的全部内容,另附源码open in new window

上次编辑于:
贡献者: 涎涎
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.4