Java IO: 字符流的Piped和CharArray
本章节将简要介绍管道与字符数组相关的reader和writer,主要涉及PipedReader、PipedWriter、CharArrayReader、CharArrayWriter。
PipedReaderPipedReader能够从管道中读取字符流。与PipedInputStream类似,不同的是PipedReader读取的是字符而非字节。换句话说,PipedReader用于读取管道中的文本。代码如下:
Reader reader = new PipedReader(pipedWriter); int data = reader.read(); while(data != -1) { //do something with data... doSomethingWithData(data); data = reader.read(); reader.close();
注意:为了清晰,代码忽略了一些必要的异常处理。想了解更多异常处理的信息,请参考Java IO异常处理。
read()方法返回一个包含了读取到的字符内容的int类型变量(译者注:0~65535)。如果方法返回-1,表明PipedReader中已经没有剩余可读取字符,此时可以关闭PipedReader。-1是一个int类型,不是byte或者char类型,这是不一样的。
正如你所看到的例子那样,一个PipedReader需要与一个PipedWriter相关联,当这两种流联系起来时,就形成了一条管道。要想更多地了解Java IO中的管道,请参考Java IO管道。
PipedWriterPipedWriter能够往管道中写入字符流。与PipedOutputStream类似,不同的是PipedWriter处理的是字符而非字节,PipedWriter用于写入文本数据。代码如下:
PipedWriter writer = new PipedWriter(pipedReader); while(moreData()) { int data = getMoreData(); writer.write(data); writer.close();
PipedWriter的write()方法取一个包含了待写入字节的int类型变量作为参数进行写入,同时也有采用字符串、字符数组作为参数的write()方法。
CharArrayReaderCharArrayReader能够让你从字符数组中读取字符流。代码如下:
char[] chars = ... //get char array from somewhere. Reader reader = new CharArrayReader(chars); int data = reader.read(); while(data != -1) { //do something with data data = reader.read(); reader.close();
如果数据的存储媒介是字符数组,CharArrayReader可以很方便的读取到你想要的数据。CharArrayReader会包含一个字符数组,然后将字符数组转换成字符流。(译者注:CharArrayReader有2个构造函数,一个是CharArrayReader(char[] buf),将整个字符数组创建成一个字符流。另外一个是CharArrayReader(char[] buf, int offset, int length),把buf从offset开始,length个字符创建成一个字符流。更多细节请参考Java官方文档)
CharArrayWriterCharArrayWriter能够把字符写入到字符输出流writer中,并且能够将写入的字符转换成字符数组。代码如下:
CharArrayWriter writer = new CharArrayWriter(); //write characters to writer. char[] chars = writer.toCharArray();
当你需要以字符数组的形式访问写入到writer中的字符流数据时,CharArrayWriter是个不错的选择。
转载自 并发编程网 - ifeve.comJava开发——28.I/O流_字符流和字节流 Java中I/O操作主要是指使用java.io包下的内容,进行输入和输出操作;输入叫做读取数据,输出叫做写出数据。主要操作文件内容,结合前面所学的File类,我们可以灵活的读取和写出文件。
相关文章
- Jmeter里的全能java测试sampler - Java request
- Java IO--字符编码getProperty、getBytes
- 【Java】java扩展机制SPI 实现
- java实现 洛谷 P1017 进制转换
- Java实现 蓝桥杯VIP 算法提高 递归倒置字符数组
- java的IO操作:字节流与字符流操作
- Java 容器 & 泛型:二、ArrayList 、LinkedList和Vector比较
- Eclipse 报 “Exception in thread "main" java.lang.OutOfMemoryError: Java heap space ”错误的解决办法
- 【JAVA】MacBook安装Java环境及eclipse
- [Linux] Install java and add JAVA_HOME, PATH
- Java多线程
- Atitit java播放器调音速率快慢的实现 目录 1.1. 原理 本质上是改变采样率即可1 2. 使用Java增加/降低AudioInputStream的音频播放速度(Increase/dec
- Error:Execution failed for task ‘:app:transformNative_libsWithStripDebugSymbolForDebug‘.> java.io.IO
- 吃透Java IO:字节流、字符流、缓冲流
- 【华为OD机试 2023】整理扑克牌(C++ Java JavaScript Python)
- Java //PP1.4 按照以下要求编写一个程序,显示句子Knowledge is Power: a.一行显示 b.每行一词,分三行显示,每个词都相对居中 c.显示在一个由字符“=“和“|“。。。
- Java学习路线-26:字节流与字符流OutputStream/InputStream/Writer/Reader
- java-设计模式汇总整理
- java - 详解 Java 17 中新推出的密封类
- 【java】Java并发编程系列- volatile关键字(高并发中特实用哦)
- JAVA开发讲义(二)-Java程序设计之数据之谜三