作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com)

本章节将简要介绍管道与字符数组相关的reader和writer,主要涉及PipedReader、PipedWriter、CharArrayReader、CharArrayWriter。

PipedReader

原文链接

PipedReader能够从管道中读取字符流。与PipedInputStream类似,不同的是PipedReader读取的是字符而非字节。换句话说,PipedReader用于读取管道中的文本。代码如下:

01 Reader reader = new PipedReader(pipedWriter);
02  
03 int data = reader.read();
04  
05 while(data != -1) {
06  
07     //do something with data...
08  
09     doSomethingWithData(data);
10  
11     data = reader.read();
12  
13 }
14  
15 reader.close();

注意:为了清晰,代码忽略了一些必要的异常处理。想了解更多异常处理的信息,请参考Java IO异常处理

read()方法返回一个包含了读取到的字符内容的int类型变量(译者注:0~65535)。如果方法返回-1,表明PipedReader中已经没有剩余可读取字符,此时可以关闭PipedReader。-1是一个int类型,不是byte或者char类型,这是不一样的。

正如你所看到的例子那样,一个PipedReader需要与一个PipedWriter相关联,当这两种流联系起来时,就形成了一条管道。要想更多地了解Java IO中的管道,请参考Java IO管道

PipedWriter

原文链接

PipedWriter能够往管道中写入字符流。与PipedOutputStream类似,不同的是PipedWriter处理的是字符而非字节,PipedWriter用于写入文本数据。代码如下:

01 PipedWriter writer = new PipedWriter(pipedReader);
02  
03 while(moreData()) {
04  
05     int data = getMoreData();
06  
07     writer.write(data);
08  
09 }
10  
11 writer.close();

PipedWriter的write()方法取一个包含了待写入字节的int类型变量作为参数进行写入,同时也有采用字符串、字符数组作为参数的write()方法。

CharArrayReader

原文链接

CharArrayReader能够让你从字符数组中读取字符流。代码如下:

01 char[] chars = ... //get char array from somewhere.
02  
03 Reader reader = new CharArrayReader(chars);
04  
05 int data = reader.read();
06  
07 while(data != -1) {
08  
09     //do something with data
10  
11     data = reader.read();
12  
13 }
14  
15 reader.close();

如果数据的存储媒介是字符数组,CharArrayReader可以很方便的读取到你想要的数据。CharArrayReader会包含一个字符数组,然后将字符数组转换成字符流。(译者注:CharArrayReader有2个构造函数,一个是CharArrayReader(char[] buf),将整个字符数组创建成一个字符流。另外一个是CharArrayReader(char[] buf, int offset, int length),把buf从offset开始,length个字符创建成一个字符流。更多细节请参考Java官方文档)

CharArrayWriter

原文链接

CharArrayWriter能够把字符写入到字符输出流writer中,并且能够将写入的字符转换成字符数组。代码如下:

1 CharArrayWriter writer = new CharArrayWriter();
2  
3 //write characters to writer.
4  
5 char[] chars = writer.toCharArray();

当你需要以字符数组的形式访问写入到writer中的字符流数据时,CharArrayWriter是个不错的选择。

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java IO: 字符流的Piped和CharArray

Java IO: 字符流的Piped和CharArray的更多相关文章

  1. Java Io 字符流

    Java Io 字符流包含: 1. InputStreamReader  它是由byte流解析为char流,并且按照给定的编码解析. 2. OutputStreamWrite  它是char流到byt ...

  2. Java IO: 字符流的Buffered和Filter

    作者: Jakob Jenkov  译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍缓冲与过滤相关的reader和writer,主要涉及BufferedReader.B ...

  3. java IO字符流

    字节流:因为内存中数据都是字节,二进制数据. 字符流:方便处理文本数据.字符流是基于字节流的. ascii 编码表,并且各国都有自己的编码表. unicode码表,世界码表.优化后 utf-8码表. ...

  4. java -io字符流FileWrite操作演示

    FileWriter字符输出流演示: /* * FiileWriter 字符流的操作 * FileWriter 的构造方法 可传递 File类型 还可以传递String类型 * * 方法 : * wr ...

  5. Java IO 转换流 字节转字符流

    Java IO 转换流 字节转字符流 @author ixenos 字节流 输入字节流:---------| InputStream 所有输入字节流的基类. 抽象类.------------| Fil ...

  6. Java IO 嵌套流、文本的输入输出和存储

    Java IO 嵌套流.文本的输入输出和存储 @author ixenos 1.   组合流过滤器(嵌套流) a)    跨平台文件分割符:常量字符串 java.io.File.seperator 等 ...

  7. Java IO 节点流 ByteArrayInput/OutputStream

    Java IO 节点流 ByteArrayInput/OutputStream @author ixenos ByteArrayInputStream 包含一个内部缓冲区(字节数组byte[]),该缓 ...

  8. 理解Java中字符流与字节流

    1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个"流动的方向",通常可 ...

  9. 理解Java中字符流与字节流的区别(转)

    1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...

随机推荐

  1. 主席树--动态区间第k小

    主席树--动态区间第\(k\)小 模板题在这里洛谷2617. 先对几个问题做一个总结: 阅读本文需要有主席树的基础,也就是通过区间kth的模板题. 静态整体kth: sort一下找第k小,时间复杂度\ ...

  2. 100道Java面试题整理(助力2020面试!)

    1.您对微服务有何了解? 微服务,又称微服务 架 构,是一种架构风格,它将应用程序构建为以业务领域为模型的小型自治服务集合 . 通俗地说,你必须看到蜜蜂如何通过对齐六角形蜡细胞来构建它们的蜂窝状物.他 ...

  3. RaspBerry--解决无法用 ssh 直接以 root 用户登录

    参考:https://www.cnblogs.com/xwdreamer/p/6604593.html 以普通用户登录,然后切换至 root 用户. 编辑 /etc/ssh/sshd_config 添 ...

  4. 计算机utf-8/gbk/utf-16对照表

    GBK   UTF-16 UTF-8 ==================D2BB  4E00  E4 B8 80  一B6A1  4E01  E4 B8 81  丁C6DF  4E03  E4 B8 ...

  5. ubuntu下查询网络的常用命令

    1.查看无线路由器(网关)的IP地址 在terminal中输入如下命令,即可查询到当前使用的路由器的IP地址(我电脑是连着一个无线网络还有一个DSL连接): route|grep -i default ...

  6. HTTP协议PUT与POST

    摘要: PUT是idempotent的方法,而POST不是. 原文:HTTP协议中PUT和POST使用区别 作者:Never-say-Never 有的观点认为,应该用POST来创建一个资源,用PUT来 ...

  7. os简介

    1. 操作系统(Operation System,OS) 操作系统作为接口的示意图  没有安装操作系统的计算机,通常被称为 裸机 如果想在 裸机 上运行自己所编写的程序,就必须用机器语言书写程序 如 ...

  8. mysql my.ini 性能调优

    MYSQL服务器my.cnf配置文档详解 硬件:内存16G [client] port = 3306 socket = /data/3306/mysql.sock [mysql] no-auto-re ...

  9. LeetCode——714. 买卖股票的最佳时机含手续费.

    给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 :非负整数 fee 代表了交易股票的手续费用. 你可以无限次地完成交易,但是你每次交易都需要付手续费.如果你已经购买了一个 ...

  10. 吴裕雄--天生自然ShellX学习笔记:Shell 变量

    定义变量时,变量名不加美元符号($,PHP语言中变量需要),如: your_name="runoob.com" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一 ...