详解 字符内存操作流

Posted codderyouzg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详解 字符内存操作流相关的知识,希望对你有一定的参考价值。

(请观看本人博文——《详解 内存操作流》


@


字符内存操作流

字符内存操作流 按照功能分 ,共分为 两种:

分类

  1. 操作字符数组
    CharArrayWrite
    CharArrayReader
  2. 操作字符串
    StringWriter
    StringReader

那么,本人现在就对这两种字符内存操作流进行下讲解:


首先是 操作字符数粗的 CharArrayWrite类 和 CharArrayReader类:

CharArrayWrite类:

首先,本人来展示下这个类的构造方法
构造方法

  • CharArrayWriter()
    创建一个新的 CharArrayWriter
  • CharArrayWriter(int initialSize)
    创建一个具有指定初始大小的新 CharArrayWriter

现在,本人来展示下这个类的常用API

常用API

  • CharArrayWriter append(char c)
    将指定字符添加到此 writer
  • CharArrayWriter append(CharSequence csq)
    将指定的字符序列添加到此 writer
  • CharArrayWriter append(CharSequence csq, int start, int end)
    将指定字符序列的子序列添加到此 writer
  • void close()
    关闭该流
  • void flush()
    刷新该流的缓冲
  • void reset()
    重置该缓冲区,以便再次使用它而无需丢弃已分配的缓冲区
  • int size()
    返回缓冲区的当前大小
  • char[] toCharArray()
    返回输入数据的副本
  • String toString()
    将输入数据转换为字符串
  • void write(char[] c, int off, int len)
    将字符写入缓冲区
  • void write(int c)
    将一个字符写入缓冲区
  • void write(String str, int off, int len)
    将字符串的某一部分写入缓冲区
  • void writeTo(Writer out)
    将缓冲区的内容写入另一个字符流

现在,本人来展示下这些API的使用:

package edu.youzg.about_io.about_file.core.Test;

import java.io.*;

public class Test {

    public static void main(String[] args) throws IOException{
        CharArrayWriter writer = new CharArrayWriter();
        writer.write("右转哥");
        writer.write("666");
        writer.write("我要单推右转哥");

        //取出缓冲区中的数据
        char[] chars = writer.toCharArray();
        System.out.println(String.valueOf(chars));
        System.out.println(new String(chars));
        System.out.println(writer.toString());
    }

}

现在,本人来展示下运行结果:
技术图片

CharArrayReader类:

首先,本人来展示下这个类的构造方法

构造方法:

  • CharArrayReader(char[] buf)
    根据指定的 char 数组创建一个 CharArrayReader
  • CharArrayReader(char[] buf, int offset, int length)
    根据指定的 char 数组创建一个 CharArrayReader

现在,本人来展示下这个类的常用API

常用API:

  • void close()
    关闭该流并释放与之关联的所有系统资源
  • void mark(int readAheadLimit)
    标记流中的当前位置
  • boolean markSupported()
    判断此流是否支持 mark() 操作(它一定支持)
  • int read()
    读取单个字符
  • int read(char[] b, int off, int len)
    将字符读入数组的某一部分
  • boolean ready()
    判断此流是否已准备好被读取
  • void reset()
    将该流重置为最新的标记,如果从未标记过,则将其重置到开头
  • long skip(long n)
    跳过字符

那么,现在,本人来展示下这些API的使用:

package edu.youzg.about_io.about_file.core.Test;

import java.io.*;

public class Test {

    public static void main(String[] args) throws IOException{
        char[] chars = "右转哥666".toCharArray();
        CharArrayReader reader = new CharArrayReader(chars);

        for (int i = 0; i < chars.length; i++) {
            int read = reader.read();
            System.out.println((char) read);
        }
        reader.close();
    }

}

技术图片


现在,本人来讲解下 操作字符串 的 StringWriter类 和 StringReader类:

StringWriter类:

首先,本人来讲解下这个类的 构造方法:

构造方法:

  • StringWriter()
    使用默认初始字符串缓冲区大小创建一个新字符串 writer
  • StringWriter(int initialSize)
    使用指定初始字符串缓冲区大小创建一个新字符串 writer

现在,本人来讲解下这个类的常用API

常用API

  • StringWriter append(char c)
    将指定字符添加到此 writer
  • StringWriter append(CharSequence csq)
    将指定的字符序列添加到此 writer
  • StringWriter append(CharSequence csq, int start, int end)
    将指定字符序列的子序列添加到此 writer
  • void close()
    关闭 StringWriter 无效
  • void flush()
    刷新该流的缓冲
  • StringBuffer getBuffer()
    返回该字符串缓冲区本身
  • String toString()
    以字符串的形式返回该缓冲区的当前值
  • void write(char[] cbuf, int off, int len)
    写入字符数组的某一部分
  • void write(int c)
    写入单个字符
  • void write(String str)
    写入一个字符串
  • void write(String str, int off, int len)
    写入字符串的某一部分

现在,本人来展示下这些API 的使用:

package edu.youzg.about_io.about_file.core.Test;

import java.io.*;

public class Test {

    public static void main(String[] args) throws IOException{
        StringWriter stringWriter = new StringWriter();
        stringWriter.write("magical coder ");
        stringWriter.append("is not me");
        String s = stringWriter.toString();
        System.out.println(s);

        stringWriter.close();
    }

}

现在,本人来展示下运行结果:
技术图片

StringReader类:

首先,本人来展示下这个类的构造方法

构造方法:

  • StringReader(String s)
    创建一个新字符串 reader

本人来展示下这个类的常用API

常用API:

  • void close()
    关闭该流并释放与之关联的所有系统资源
  • void mark(int readAheadLimit)
    标记流中的当前位置
  • boolean markSupported()
    判断此流是否支持 mark() 操作以及支持哪一项操作
  • int read()
    读取单个字符
  • int read(char[] cbuf, int off, int len)
    将字符读入数组的某一部分
  • boolean ready()
    判断此流是否已经准备好用于读取
  • void reset()
    将该流重置为最新的标记,如果从未标记过,则将其重置到该字符串的开头
  • long skip(long ns)
    跳过流中指定数量的字符

现在,本人来展示下部分API的使用:

package edu.youzg.about_io.about_file.core.Test;

import java.io.*;
import java.nio.charset.Charset;

public class Test {

    public static void main(String[] args) throws IOException{
        StringReader reader = new StringReader("magical coder is not me");
        char[] chars = new char[10];
        int len = 0;
        
        while ((len = reader.read(chars)) != -1) {
            System.out.println(chars);
        }

        reader.close();
    }

}

现在,本人来展示下运行结果:
技术图片

(本人《详解 内存操作流》博文链接:https://www.cnblogs.com/codderYouzg/p/12418617.html
(本人 I/O流总集篇 博文链接:https:////www.cnblogs.com/codderYouzg/p/12418404.html

以上是关于详解 字符内存操作流的主要内容,如果未能解决你的问题,请参考以下文章

字符流详解及代码测试

java内存流:java.io.ByteArrayInputStreamjava.io.ByteArrayOutputStreamjava.io.CharArrayReaderjava.io(代码片段

Java字节流和字符流详解

20160206.CCPP体系详解(0016天)

C语言进阶—— 字符操作函数+内存操作函数详解 (吐血爆肝 !!!)

20160206.CCPP体系详解(0016天)