首页 > 编程 > Java > 正文

Java的字符读写类CharArrayReader和CharArrayWriter使用示例

2019-11-26 14:09:41
字体:
来源:转载
供稿:网友

CharArrayReader
CharArrayReader 是字符数组输入流。它和ByteArrayInputStream类似,只不过ByteArrayInputStream是字节数组输入流,而CharArray是字符数组输入流。CharArrayReader 是用于读取字符数组,它继承于Reader。操作的数据是以字符为单位!
CharArrayReader 函数列表:

CharArrayReader(char[] buf)CharArrayReader(char[] buf, int offset, int length)void   close()void   mark(int readLimit)boolean  markSupported()int    read()int    read(char[] buffer, int offset, int len)boolean  ready()void   reset()long   skip(long charCount)

示例代码:
关于CharArrayReader中API的详细用法,参考示例代码(CharArrayReaderTest.java):

import java.io.CharArrayReader;import java.io.CharArrayWriter;import java.io.IOException;public class CharArrayReaderTest {  private static final int LEN = 5;  // 对应英文字母“abcdefghijklmnopqrstuvwxyz”  private static final char[] ArrayLetters = new char[] {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};  public static void main(String[] args) {    tesCharArrayReader() ;  }  /**   * CharArrayReader的API测试函数   */  private static void tesCharArrayReader() {    try {      // 创建CharArrayReader字符流,内容是ArrayLetters数组      CharArrayReader car = new CharArrayReader(ArrayLetters);      // 从字符数组流中读取5个字符      for (int i=0; i<LEN; i++) {        // 若能继续读取下一个字符,则读取下一个字符        if (car.ready() == true) {          // 读取“字符流的下一个字符”          char tmp = (char)car.read();          System.out.printf("%d : %c/n", i, tmp);        }      }      // 若“该字符流”不支持标记功能,则直接退出      if (!car.markSupported()) {        System.out.println("make not supported!");        return ;      }      // 标记“字符流中下一个被读取的位置”。即--标记“f”,因为因为前面已经读取了5个字符,所以下一个被读取的位置是第6个字符”      // (01), CharArrayReader类的mark(0)函数中的“参数0”是没有实际意义的。      // (02), mark()与reset()是配套的,reset()会将“字符流中下一个被读取的位置”重置为“mark()中所保存的位置”      car.mark(0);      // 跳过5个字符。跳过5个字符后,字符流中下一个被读取的值应该是“k”。      car.skip(5);      // 从字符流中读取5个数据。即读取“klmno”      char[] buf = new char[LEN];      car.read(buf, 0, LEN);      System.out.printf("buf=%s/n", String.valueOf(buf));      // 重置“字符流”:即,将“字符流中下一个被读取的位置”重置到“mark()所标记的位置”,即f。      car.reset();      // 从“重置后的字符流”中读取5个字符到buf中。即读取“fghij”      car.read(buf, 0, LEN);      System.out.printf("buf=%s/n", String.valueOf(buf));    } catch (IOException e) {      e.printStackTrace();    }  }}

运行结果:

0 : a1 : b2 : c3 : d4 : ebuf=klmnobuf=fghij

CharArrayWriter
CharArrayReader 用于写入数据符,它继承于Writer。操作的数据是以字符为单位!
CharArrayWriter 函数列表

CharArrayWriter()CharArrayWriter(int initialSize)CharArrayWriter   append(CharSequence csq, int start, int end)CharArrayWriter   append(char c)CharArrayWriter   append(CharSequence csq)void   close()void   flush()void   reset()int   size()char[]   toCharArray()String   toString()void   write(char[] buffer, int offset, int len)void   write(int oneChar)void   write(String str, int offset, int count)void   writeTo(Writer out)

示例代码:
关于CharArrayWriter中API的详细用法,参考示例代码(CharArrayWriterTest.java):

import java.io.CharArrayReader;import java.io.CharArrayWriter;import java.io.IOException;public class CharArrayWriterTest {  private static final int LEN = 5;  // 对应英文字母“abcdefghijklmnopqrstuvwxyz”  private static final char[] ArrayLetters = new char[] {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};  public static void main(String[] args) {    tesCharArrayWriter() ;  }  /**   * CharArrayWriter的API测试函数   */  private static void tesCharArrayWriter() {    try {      // 创建CharArrayWriter字符流      CharArrayWriter caw = new CharArrayWriter();      // 写入“A”个字符      caw.write('A');      // 写入字符串“BC”个字符      caw.write("BC");      //System.out.printf("caw=%s/n", caw);      // 将ArrayLetters数组中从“3”开始的后5个字符(defgh)写入到caw中。      caw.write(ArrayLetters, 3, 5);      //System.out.printf("caw=%s/n", caw);      // (01) 写入字符0      // (02) 然后接着写入“123456789”      // (03) 再接着写入ArrayLetters中第8-12个字符(ijkl)      caw.append('0').append("123456789").append(String.valueOf(ArrayLetters), 8, 12);      System.out.printf("caw=%s/n", caw);      // 计算长度      int size = caw.size();      System.out.printf("size=%s/n", size);      // 转换成byte[]数组      char[] buf = caw.toCharArray();      System.out.printf("buf=%s/n", String.valueOf(buf));      // 将caw写入到另一个输出流中      CharArrayWriter caw2 = new CharArrayWriter();      caw.writeTo(caw2);      System.out.printf("caw2=%s/n", caw2);    } catch (IOException e) {      e.printStackTrace();    }  }}

运行结果:

caw=ABCdefgh0123456789ijklsize=22buf=ABCdefgh0123456789ijklcaw2=ABCdefgh0123456789ijkl

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表