Java IO: 字符流的Piped和CharArray

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

PipedReader

原文链接

PipedReader能够从管道中读取字符流。与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管道

PipedWriter

原文链接

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

PipedWriter writer = new PipedWriter(pipedReader);

while(moreData()) {

    int data = getMoreData();

    writer.write(data);

}

writer.close();

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

CharArrayReader

原文链接

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

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官方文档)

CharArrayWriter

原文链接

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

CharArrayWriter writer = new CharArrayWriter();

//write characters to writer.

char[] chars = writer.toCharArray();

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

时间: 2024-08-20 11:17:08

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

Java IO: 字符流的Buffered和Filter

本章节将简要介绍缓冲与过滤相关的reader和writer,主要涉及BufferedReader.BufferedWriter.FilterReader.FilterWriter. BufferedReader 原文链接 BufferedReader能为字符输入流提供缓冲区,可以提高许多IO处理的速度.你可以一次读取一大块的数据,而不需要每次从网络或者磁盘中一次读取一个字节.特别是在访问大量磁盘数据时,缓冲通常会让IO快上许多. BufferedReader和BufferedInputStrea

字节流-JAVA缓冲字符流在实例化传入的必须是字符流吗?

问题描述 JAVA缓冲字符流在实例化传入的必须是字符流吗? 缓冲字符流在实例化传入的必须是字符流吗?可以传入 InputStream或OutputStream吗? 今天看代码遇到了这样的写法,不知道这种写法对不对,求告知原因! OutputStream os=new FileOutputStream("pw.txt",true); PrintWriter pw = new PrintWriter(os,true); 解决方案 首先你得捕获异常,应该这样 OutputStream os

java io对象流问题

问题描述 我把一个对象用Objectoutputstream,对象流写进文本里,然后还写入了一些其他的文字,不是对象,我在读取这个文件的时候读出了这个对象后剩下的文字应该怎么读出来?能换输入流吗?我用Objectinputstream读对象后,再读内容报错了Exceptioninthread"main"java.io.StreamCorruptedException:invalidtypecode:D3 解决方案 解决方案二:再换输入流,怎么定位那个不是对象的字符?一般写入对象,即对象

Java IO包装流如何关闭

问题: (1)JAVA的IO流使用了装饰模式,关闭最外面的流的时候会自动调用被包装的流的close()方吗? (2)如果按顺序关闭流,是从内层流到外层流关闭还是从外层到内存关闭? 问题(1)解释: 如下例子代码: 1 2 3   FileInputStream is = new FileInputStream(".");      BufferedInputStream bis = new BufferedInputStream(is);     bis.close(); 从设计模式上

Java使用字符流拷贝文件出现乱码

Java代码 //      BufferedReader in = null; //      BufferedWriter out = null; Reader in = null; Writer out = null; try { //          in = new BufferedReader(new FileReader(src)); //          in = new BufferedReader(new InputStreamReader(new FileInputSt

Java IO教程

Java IO 是一套Java用来读写数据(输入和输出)的API.大部分程序都要处理一些输入,并由输入产生一些输出.Java为此提供了java.io包. 如果你浏览下java.io包,会对其中各样的类选择感到迷惑.这些类的作用都是什么?对于某个任务该选择哪个类?怎样创建你自己的类做插件?这个手册的目的就是给你介绍这些类是如何组织的,以及怎样使用他们,因此你就不会疑惑需要时怎样选取合适的类,或者是否有一个满足你需求的类已经存在了. Java.io 包的范围 java.io 包并没有涵盖所有输入输出

java笔记八:IO流之字符流与字符缓冲流

java中字符流主要都是继承于Reader和Writer两个抽象类.用于对字符文本的读写操作.   一.转换类流 1 package com.iotest; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.InputStreamRe

java 字节流和字符流的区别

字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件,如图12-6所示. <iframe id="iframe_0.4142593172691813" style="margin: 0px; padding: 0px; border-width: initial; border-style: none; width:

Java字符流与字节流区别与用法分析_java

本文实例讲述了Java字符流与字节流区别与用法.分享给大家供大家参考,具体如下: 字节流与字符流主要的区别是他们的的处理方式 流分类: 1.Java的字节流 InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先. 2.Java的字符流 Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先. InputStream,OutputStream,Reader,writer都是抽象类.所以不能直接new 字节流是最基本的,所有的Inpu