流的过滤器串链

《Java网络编程》笔记

不知道大家对Java的流这个概念熟不熟悉,或者说对文件读写、网络数据读写熟不熟悉。

最近读《Java网络编程》第一章节的时候,正好看到了一段之前一直困惑我的代码。

前置知识

输入流

InputStream

  • FileInputStream 从文件中读数据
  • TelnetInputStream从网络中读数据
  • ByteArrayStream 从字节数组中读数据

输出流

OutputStream

  • FileOutputStream把数据写入文件
  • TalnetOutputStream把数据写入网络
  • ByteArrayOutputStream 把数据写入可扩展的字节数组

过滤器流

过滤器(filter)流可以串联到输入流或输出流上。可以来实现加密或者压缩,或者只是将数据转换为其他格式。DataOutputStream。简单说就是层层对流进行转化处理成指定的、最终所需要的、最方便使用的流。

过滤器串链案例

DataOutputStream out = new DataOutputStream(
						new BufferedOutputStream(
						new FileOutputStream("data.txt"))
						);

看到这段代码,先别急着看下去,不知道大家是不是跟我有一样的疑惑为什么是这样子层层嵌套?难道只是为了少一点临时变量,代码整洁吗?为什么不能写成下面这样呢?

	FileOutputStream fout = new FileOutputStream("data.txt");
	BufferedOutputStream bout = new BufferedOutputStream(fout);
	DataOutputStream out = new DataOutputStream(bout);

原因:之后的使用中,很容易出现对foutboutout混淆;混着用read()方法,也就是会调用同一个数据源的不同流,这就可能会违反过滤器流的一些隐含约定。大多数情况下都是对最后一个过滤器进行实际读写,也就是这里的DataOutputStream ;试想一下如果使用bout的破坏了缓冲区数据怎么办呢?

而串联起来之后自然就避免了这个问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值