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

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
(0)

相关推荐

  • java使用randomaccessfile在文件任意位置写入数据

    复制代码 代码如下: import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.RandomAccessFile; public class InsertContent {    public static void insert(String fileName, long pos, String inse

  • RandomAccessFile简介_动力节点Java学院整理

    RandomAccessFile RandomAccessFile 是随机访问文件(包括读/写)的类.它支持对文件随机访问的读取和写入,即我们可以从指定的位置读取/写入文件数据. 需要注意的是,RandomAccessFile 虽然属于java.io包,但它不是InputStream或者OutputStream的子类:它也不同于FileInputStream和FileOutputStream. FileInputStream 只能对文件进行读操作,而FileOutputStream 只能对文件进

  • 深入分析:用1K内存实现高效I/O的RandomAccessFile类的详解

    主体:目前最流行的J2SDK版本是1.3系列.使用该版本的开发人员需文件随机存取,就得使用RandomAccessFile类.其I/O性能较之其它常用开发语言的同类性能差距甚远,严重影响程序的运行效率.开发人员迫切需要提高效率,下面分析RandomAccessFile等文件类的源代码,找出其中的症结所在,并加以改进优化,创建一个"性/价比"俱佳的随机文件访问类BufferedRandomAccessFile.在改进之前先做一个基本测试:逐字节COPY一个12兆的文件(这里牵涉到读和写)

  • Java核心编程之文件随机读写类RandomAccessFile详解

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 1.RandomAccessFile RandomAccessFile主要用于文件内容的读写访问 2.访问模式 "r":只读方式. "rw":打开以便读取和访问,如果文件不存在则创建文件. "rws": 除了'rw'功能以外,文件内容或者元数据更新时一同写入. "rwd":除了'rw'功能以外,文件内容更新时一同写入. 3.使用案例 pack

  • Java RandomAccessFile 指定位置实现文件读取与写入

    Java RandomAccessFile 指定位置实现文件读取与写入 RandomAccessFile是属于随机读取类,是可以对文件本身的内容直接随机进行操作的,可以在文件的指定位置的读取和写入内容,这在很多时候都是很方便的. RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须是可知的.但是该类仅限于操作文件. RandomAccessFile不属于InputStream和Out

  • Java使用RandomAccessFile类对文件进行读写

    1. RandomAccessFile类简介 前面一篇随笔<File类遍历目录及文件>中有说到,File类只能用于表示文件或目录的名称.大小等信息,而不能用于文件内容的访问.而当需要访问文件内容时,就可以用RandomAccessFile类了. RandomAccessFile是Java提供用来访问一些保存数据记录的文件的类,可以进行读取操作,也可以进行写入操作,写入的数据则以byte的形式存储:支持随机访问,也就是可以访问文件的任意位置(通过文件指针实现). 2. 构造函数 RandomAc

  • Java中IO流 RandomAccessFile类实例详解

    Java中IO流 RandomAccessFile类实例详解 RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件. 支持随机访问文件,可以访问文件的任意位置. java文件模型,在硬盘上的文件是byte byte byte存储的,是数据的集合 打开文件,有两种模式,"rw"读写."r"只读:RandomAccessFile raf = new RandomAccessFile(file, "rw");,文

  • Java RandomAccessFile的用法详解

    RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须是可知的.但是该类仅限于操作文件. RandomAccessFile不属于InputStream和OutputStream类系的.实际上,除了实现DataInput和 DataOutput接口之外(DataInputStream和DataOutputStream也实现了这两个接口),它和这两个类系毫

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

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

  • Java压缩文件工具类ZipUtil使用方法代码示例

    本文实例通过Java的Zip输入输出流实现压缩和解压文件,前一部分代码实现获取文件路径,压缩文件名的更改等,具体如下: package com.utility.zip; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import

  • Java中的魔法类:sun.misc.Unsafe示例详解

    前言 Unsafe类在jdk 源码的多个类中用到,这个类的提供了一些绕开JVM的更底层功能,基于它的实现可以提高效率.但是,它是一把双刃剑:正如它的名字所预示的那样,它是Unsafe的,它所分配的内存需要手动free(不被GC回收).Unsafe类,提供了JNI某些功能的简单替代:确保高效性的同时,使事情变得更简单. 这个类是属于sun.* API中的类,并且它不是J2SE中真正的一部份,因此你可能找不到任何的官方文档,更可悲的是,它也没有比较好的代码文档. 这篇文章主要是以下文章的整理.翻译.

  • Java如何基于ProcessBuilder类调用外部程序

    这篇文章主要介绍了Java如何基于ProcessBuilder类调用外部程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1. demo1 @Test public void testProcessBuilder() { ProcessBuilder processBuilder = new ProcessBuilder(); // processBuilder.command("ping","127.0.0.1"

  • 基于Java创建一个订单类代码实例

    这篇文章主要介绍了基于Java创建一个订单类代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需求描述 定义一个类,描述订单信息 订单id 订单所属用户(用户对象) 订单所包含的商品(不定数量个商品对象) 订单总金额 订单应付金额: 总金额500~1000,打折85折 总金额1000~1500,打折80折 总金额1500~2000,打折70折 总金额超过2000,打折65折 在此基础上,还要看用户的vip等级 用户vip等级为:一般会员,

  • Java日期与时间类原理解析

    这篇文章主要介绍了Java日期与时间类原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 基础知识 日期: 类似于 2018-12-12 时间: 类似于 2018-12-12 12:12:12 时刻: 类似于 2018-12-12 12:12:12 地区: 计算机中的 Locale, 如 zh_CN, en_US 等, 影响着对于日期, 时间, 货币等格式的显示 EpochTime: 从 1970 年 1 月 1 日 UTC+00:00 到

  • Java基于字符流形式读写数据的两种实现方法示例

    本文实例讲述了Java基于字符流形式读写数据的两种实现方法.分享给大家供大家参考,具体如下: 第一种方式:逐个字符进行读写操作(代码注释以及详细内容空闲补充) package IODemo; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class CopyFileDemo { /** * @param args * @throws IOException */ p

  • Java中字符数组、String类、StringBuffer三者之间相互转换

    一.StringBuffer与String的相互转换 1.将StringBuffer转换成String StringBuffer类成员toString函数可将其转换成String类型. StringBuffer buffer = newStringBuffer("abcd"); String str = buffer.toString(); 通过String类中的构造将一个StringBuffer类转换为String类:String(StringBuffer buffer) Strin

  • Java基础字符编码与内存流详细解读

    目录 1.字符编码 1.1 常用字符编码 1.2 乱码产生分析 2.内存流基本操作 3.打印流 3.1 格式化文本信息 4. System类 4.1 系统输出 4.2 系统输出 4.3 系统输入 5.BufferedReader类 6.Scanner 7.对象序列化 7.1 对象序列化的概念 7.2 实现序列化和反序列化 7.3 transient关键字(了解) 1.字符编码 1.1 常用字符编码 在计算机的世界之中,所有的显示文字都是按照其指定的数字编码进行保存的,如果没有正确的解码,那么就坑

  • java实现文件读写与压缩实例

    本文通过实例讲述了Java对文件读写与压缩的实现方法,具体代码如下: package com.toone.iform.action.common; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutp

随机推荐