`
ajoo
  • 浏览: 452767 次
社区版块
存档分类
最新评论

瓜娃之走马观花 (3) - CharStreams和ByteStreams

阅读更多
其实guava可以看成是支持java5的apache commons之类的项目.
第一第二回讲的主要是集合类的一些最常用的工具. 其实com.google.common.collect里还有很多非常有用的工具, 比如Ordering, ComparisonChain, Iterables, Multiset, Multimap等等. 这里有些我们后面还会涉及.

小兄弟正在做socket客户服务器通信相关的课程设计, 所以我有点迫不及待先讲讲common.io这个包了. 这里面最有用的, 在我看来, 就是CharStreamsByteStreams这两个工具.

大家知道, Java里读外设主要是跟InputStream和Reader打交道. 其中InputStream用来读取原始的字节流, 而Reader是在你已经知道了输入是用什么字符集编码的情况下读取字符串.

但是这两个类还是相对底层了一些. 在做一些很灵活复杂的事情的时候是必要的, 甚至我们还需要抬出nio这个大杀器. 可它们对日常工作中一些简单的事情, 就有炮弹打蚊子的感觉.

比如, 我需要从一个Reader里一行一行读出所有文本. 直接用Reader的话, 你需要弄一个BufferedReader, 然后循环调用readLine(), 直到全部读完. 类似这样:

BufferedReader buffered = new BufferedReader(reader);
List<String> lines = new ArrayList<String>();
for (;;) {
  String line = buffered.readLine();
  if (line == null) {
    break;
  }
  lines.add(line);
}


用CharStreams的话, 一句话就搞定了:
List<String> lines = CharStreams.readLines(reader);


如果你还是需要类似于流一样的操作-比如, 输入的行数太多, 不能一下子都读进来, 那么, 还有一个LineReader可以用. 用起来类似于:
LineReader lineReader = new LineReader(reader);
for (String line = lineReader.readLine(); line != null; line = lineReader.readLine()) {
  System.out.println(line);
}



其它的one-liner, 包括:
从一个Readable读取所有东西写到一个Appendable里去:
CharStreams.copy(reader, writer);

从Readable读取所有内容到一个字符串:
String content = CharStreams.toString(reader);


另外, 写io程序一个最常见的bug, 就是打开东西忘记关了. 或者关的不彻底. 一般来说, 你要开一个InputStream, 肯定要接下来用一个try-finally, 在用完之后调用close()把它关上. OutputStream, Reader, Writer同理.

但是这很麻烦, 而且容易忘. 在java7的自动资源管理出来之前, 可以用common.io包定义的InputSupplier, OutputSupplier接口.

原理是, 你实现一个InputSupplier对象, 把"怎样打开这个InputStream/Reader"的逻辑封装在getInput()它的函数里, 然后, 把它传递给CharStreams, ByteStreams相关的API, 比如readLines(), copy()等, 这些API调用你的supplier, 然后做事, 做完之后它把自己屁股擦干净, 把它打开的InputSteam/Reader再关上.

ByteStreams很类似, 不过它是工作在字节流上, 而不关心字符编码问题.
对应于CharStreams.toString(), 是
byte[] content = ByteStreams.toByteArray(inputStream)

用来把整个InputStream的内容全部一次性读到一个byte[]里面.

对应于CharStreams.copy(), 是
ByteStreams.copy(inputStream, outputStream);

用来把所有内容从一个InputStream拷贝到另一个OutputStream.


嗯. 以上.
6
2
分享到:
评论
4 楼 huang_yong 2010-11-25  
建议再扩展一些知识点点比较好,比如 Files 工具类有一些非常不错的方法,封装了对文件的常用操作,例如 copy() 方法等。
3 楼 ajoo 2010-08-15  
dogstar 写道
最好能走马一下 functional java.哈

瓜娃有一些functional的东西.

但是说实话, 实际应用中, 发现这些东西缺憾不少. java不是一个functional语言. 强行搞功能上也能差相人意, 但是可读性较差.

Function+Predicate+Functions+Predicates+Iterables基本上就是提供的fj生态环境的主体了. 也就是说, function主要的就用来作Iterable的元素转换, predicate就用来作过滤.

这些还可以, 不过个人觉得不是必不可少的, 直接拿java自己写转换过滤也要不了多少代码, 而且只怕代码还更容易懂.

等java7的closure如果成为现实, 我相信fj必然大行其道的.
2 楼 dogstar 2010-08-15  
最好能走马一下 functional java.哈
1 楼 dogstar 2010-08-15  
不给力啊     

相关推荐

    第1讲-引论-走马观花看导论.pptx

    第1讲-引论-走马观花看导论.pptx

    单片机实例-走马观花

    【单片机实例-走马观花】是一个适合初学者的实践项目,旨在通过一个具体的走马灯(或称为流水灯)实验,帮助学习者掌握单片机的基础操作和编程技巧。走马灯通常指的是LED灯按照特定顺序依次点亮或熄灭,形成流动的...

    Proto3语言指南-简体中文版

    怕有误人子弟之嫌,先贴上官方文档的地址,本译文仅供参考:https://developers.google.com/protocol-buffers/docs/proto3 PS:表格不好排版,采用了A3的稿纸设置,放大了才能看的更清楚。另外,意译的累,收点积分...

    Nexys3学习手记3:硬件外设走马观花

    【Nexys3学习手记3:硬件外设走马观花】 在探索Nexys3开发板的硬件世界时,了解其结构和组件至关重要。Nexys3是一款基于Spartan-6 FPGA(XC6SLX16)的教育与实验平台,它拥有丰富的外设,便于学习和实践数字系统...

    关于走马观花灯的单片机实训报告概要.pdf

    走马观花灯是一种常见的灯光装饰,通过编程和控制能够实现多样的动态效果。这篇实训报告主要探讨了基于单片机实现可调控走马灯的设计与实现过程,旨在提升学生对于单片机应用和硬件电路设计的理解。 首先,报告的...

    Java程序设计高晓黎走马观花看PPT教案学习.pptx

    这份名为"Java程序设计高晓黎走马观花看PPT教案学习.pptx"的学习材料似乎提供了关于Java核心概念的概览,包括程序结构、运行机制、GUI界面、JVM的工作原理和垃圾回收机制。 首先,Java程序的结构框架是理解任何编程...

    八年级地理下册 第七章 第二节 澳门特别行政区的旅游文化特色 知识拓展 走马观花澳门博彩业素材 湘教版.doc

    八年级地理下册 第七章 第二节 澳门特别行政区的旅游文化特色 知识拓展 走马观花澳门博彩业素材 湘教版.doc

    Flex从入门到实践——源代码(11章)

    Flex是Adobe公司开发的一种用于构建富互联网应用程序(RIA)的框架,主要基于ActionScript和MXML语言。这个压缩包文件包含的是"Flex从入门到实践"教程的源代码,共11章,提供了深入学习Flex开发的实战示例。通过这些...

    leetcode小岛出水口-LeetCode:LeetCode走马观花

    01.两数之和 02.两数相加 03.无重复字符的最长子串 05.最长回文子串 06.Z字型变换 07.整数反转 08.字符串转换整数 09.回文数 10.正则表达式匹配 11.盛最多水的容器 12.整数转罗马数字 13.罗马数字转整数 14.最长公共...

    阅读方法有哪些.docx

    #### 3. 有选择地阅读 - **定义**:根据个人兴趣或需求选择性地阅读某些章节或段落。 - **特点**:可以跳过不太相关的部分,专注于重要内容。 - **应用场景**: - 阅读专业文献时,仅关注与研究课题紧密相关的部分...

    江苏省泰州中学2019届高三语文第四次模拟试题含解析

    题目中通过比较“悠远”和“幽远”的区别、“记忆犹新”与“历历在目”的含义以及“浮光掠影”和“走马观花”的不同,引导学生选择最适合语境的词语。第二题是句子排序题,测试学生的语言逻辑和连贯性,需要将六个...

    五年级上册,语文选择题.pdf

    这篇资料主要包含的是小学五年级上册语文的选择题,涵盖了词语理解、句子含义解析、诗词理解、阅读理解和语言艺术等多个方面。以下是对这些知识点的详细解释: 1. 文学理解: - "你们是吃饭长大的;也是读书长大的...

    小学教育必背成语归类大全.doc

    - 走马观花、手舞足蹈等成语描述了具体的动作和行为。 - 前俯后仰、奔走相告、跋山涉水则展现了人的活动和奋斗。 8. **描写人间情谊**: - 恩重如山、生死相依、肝胆相照等成语表达了深厚的情感联系和忠诚。 9....

    六年级语文上册 第一单元 3《七月的天山》精美优质教案 冀教版-冀教版小学六年级上册语文教案.doc

    同时,培养学生的审美能力和对祖国山水的热爱之情。 教学过程中,教师可以引导学生从整体上把握天山的地理环境,了解天山作为亚洲中部大山脉的地理位置和地貌特征。然后,通过朗读课文,让学生感受骑马上天山的意境...

    2014_2015句子练习——陈晖.ppt

    - 走马观花:形容快速地看,没有仔细欣赏。 - 变化多端:形容变化非常多,难以预测。 - 枝繁叶茂:形容树木枝叶茂密繁盛。 - 无忧无虑:形容没有忧虑和烦恼。 - 粗细各异:形容事物的粗细不一,各有特点。 - ...

    德安事业编招聘2020年考试真题及答案解析完整版.docx

    正确的顺序可能是1-4-2-3-5,即糖化→发酵→滤清→包装→出售。 4. **环保与包装**: - 消费者对废弃包装对生态环境的影响表示关注,这一关注可能导致商店引入浓缩形式的清洁产品,以减少塑料使用和运输空间。 - ...

    小学生课外知识集锦.doc

    - 描写山水美景、花草树木、日月风云的成语,让孩子们感受自然之美,培养审美能力。 这份集锦不仅提供了丰富的词汇,还包含了许多富有哲理的成语故事,帮助小学生在积累知识的同时,提升思维能力和人文素养。

    三年级上册成语归类大全.doc

    【成语是中国传统文化中的瑰宝,它们以简洁的形式承载着丰富的哲理和文化内涵。这篇文档“三年级上册成语归类大全.doc”旨在帮助学生系统学习和掌握这些成语,按照不同的主题进行分类,以便更好地理解和应用。以下是...

    Linux那些事儿之我是USB(第2版)

    ### Linux那些事儿之我是USB(第2版)关键知识点概览 #### 一、书籍概述 - **核心主题**:本书主要围绕Linux内核中的USB子系统展开,深入剖析其工作原理和技术细节。 - **目标读者**:面向Linux初学者、驱动开发者...

    四年级上册童话习作指导PPT学习教案.pptx

    - 学习使用成语,如“汗马功劳”、“走马观花”,融入故事中,增加故事的文化内涵和趣味性。 总结:这份四年级上册的童话习作指导PPT着重于教授学生理解童话的特点,区分童话与寓言,并通过观察图片和创编故事来...

Global site tag (gtag.js) - Google Analytics