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

 更新时间:2016年06月22日 08:55:58   作者:skywang  
这篇文章主要介绍了Java的字符读写类CharArrayReader和CharArrayWriter使用示例,两个类分别继承于Reader和Writer,需要的朋友可以参考下

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 : a
1 : b
2 : c
3 : d
4 : e
buf=klmno
buf=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=ABCdefgh0123456789ijkl
size=22
buf=ABCdefgh0123456789ijkl
caw2=ABCdefgh0123456789ijkl

相关文章

  • 各种格式的编码解码工具类分享(hex解码 base64编码)

    各种格式的编码解码工具类分享(hex解码 base64编码)

    这篇文章主要介绍了各种格式的编码解码工具类,集成Commons-Codec、Commons-Lang及JDK提供的编解码方法
    2014-01-01
  • Java I/O流之打印流详细使用方法教程

    Java I/O流之打印流详细使用方法教程

    java的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操作,下面这篇文章主要给大家介绍了关于Java IO流打印流详细使用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • java Spring MVC4环境搭建实例详解(步骤)

    java Spring MVC4环境搭建实例详解(步骤)

    spring WEB MVC框架提供了一个MVC(model-view-controller)模型-视图-控制器的结构和组件,利用它可以开发更灵活、松耦合的web应用。MVC模式使得整个服务应用的各部分(控制逻辑、业务逻辑、UI界面展示)分离开来,使它们之间的耦合性更低
    2017-08-08
  • SpringBoot静态资源映射,图片无法实时访问问题及解决

    SpringBoot静态资源映射,图片无法实时访问问题及解决

    文章介绍了Spring Boot中静态资源映射配置,解决了图片上传后无法实时访问的问题,通过配置虚拟路径,将访问路径映射到指定的物理路径,解决了图片无法实时显示的问题
    2025-02-02
  • Java实现提取HTML文件中的文本内容

    Java实现提取HTML文件中的文本内容

    从 HTML 文件中提取文本内容是数据抓取中的一个常见任务,本文主要和大家分享了如何使用免费 Java API 从HTML 文件中提取文本内容,需要的可以参考下
    2024-04-04
  • java初学者必须理解这几个问题

    java初学者必须理解这几个问题

    这篇文章主要介绍了java初学者必须理解这几个问题,需要的朋友可以参考下
    2014-10-10
  • mybatis 集合嵌套查询和集合嵌套结果的区别说明

    mybatis 集合嵌套查询和集合嵌套结果的区别说明

    这篇文章主要介绍了mybatis 集合嵌套查询和集合嵌套结果的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 详解Vue响应式的部分实现

    详解Vue响应式的部分实现

    响应式,简单来说当数据发生变化时,对数据有依赖的代码会重新执行。这篇文章主要为大家介绍了Vue中响应式的部分实现,感兴趣的可以了解一下
    2022-12-12
  • Java通过反射机制将对象封装成JSON和JsonArray格式

    Java通过反射机制将对象封装成JSON和JsonArray格式

    这篇文章主要介绍了Java通过反射机制将对象封装成JSON和JsonArray格式,JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法,需要的朋友可以参考下
    2023-10-10
  • Java中的Cglib动态代理详细解读

    Java中的Cglib动态代理详细解读

    这篇文章主要介绍了Java中的Cglib动态代理详细解读,CGLib是一个强大的、高性能、高质量的 Code 生成类库,它可以在运行期扩展 Java 类与实现 Java 接口,需要的朋友可以参考下
    2023-11-11

最新评论