Dotcpp  >  编程教程  >  Java输入输出流  >  Java数组流

Java数组流

点击打开在线编译器,边学边练

我们要知道,流的源和目的地除了可以是文件以外,还可以是计算机内存

1.字节数组流

字节数组输入流ByteArrayInputStream和字节数组输出流ByteArrayOutputStream分别使用字节数组作为流的源和目的地。

1)ByteArrayInputStream流的构造方法如下:

ByteArrayInputStream(byte[] buf);
ByteArrayInputStream(byte[] buf,int offset,int length);


第一个构造方法构造的字节数组流的源是参数buf指定的数组的全部字节单元;第二个构造方法构造的字节数组流的源是buf指定的数组从offset处按顺序取的length个字节单元。


字节数组输入流调用public int read();方法可以顺序地从源中读出一个字节,该方法返回读出的字节值;调用public int read(byte[] b,int off,int len);方法可以顺序地从源中读出参数len指定的字节数,并将读出的字节存放到参数b指定的数组中,参数off指定数组b存放读出字节的起始位置,该方法返回实际读出的字节个数,如果未读出字节read方法返回-1。

2)ByteArrayOutputStream流的构造方法如下:

ByteArrayOutputStream();
ByteArrayOutputStream(int size);


第一个构造方法构造的字节数组输出流指向一个默认大小为32字节的缓冲区,如果输出流向缓冲区写入的字节个数大于缓冲区时,缓冲区的容量会自动增加。


第二个构造方法构造的字节数组输出流指向的缓冲区的初始大小由参数size指定,如果输出流向缓冲区写入的字节个数大于缓冲区时,缓冲区的容量会自动增加。


字节数组输出流调用public void write(int b);方法可以顺序地向缓冲区写入一个字节;调用public void write(byte[] b,int off,int len);方法可以将参数b中指定的len个字节顺序地写入缓冲区,参数off指定从b中写出的字节的起始位置;调用public byte[] toByteArray();方法可以返回输出流写入到缓冲区的全部字节。

2.字符数组流

与字节数组流对应的是字符数组流CharArrayReader类和CharArrayWriter类,字符数组流分别使用字符数组作为流的源和目标。


例如,使用数组流向内存(输出流的缓冲区)写入“mid-autumn festival”和“中秋快乐”,然后再从内存读取曾写入的数据:

import java.io.*;
public class Main {
    public static void main(String args[]) {
        try {
            ByteArrayOutputStream outByte = new ByteArrayOutputStream();
            byte [] byteContent = "mid-autumn festival ".getBytes();
            outByte.write(byteContent);
            ByteArrayInputStream inByte = new ByteArrayInputStream(outByte.toByteArray());
            byte backByte [] = new byte[outByte.toByteArray().length];
            inByte.read(backByte);
            System.out.println(new String(backByte));
            CharArrayWriter outChar = new CharArrayWriter();
            char [] charContent = "中秋快乐".toCharArray();
            outChar.write(charContent);
            CharArrayReader inChar = new CharArrayReader(outChar.toCharArray());
            char backChar [] = new char [outChar.toCharArray().length];
            inChar.read(backChar);
            System.out.println(new String(backChar));
        }
        catch(IOException exp) {}
    }
}



本文固定URL:https://www.dotcpp.com/course/874

上一课:

Java随机流

下一课:

Java数据流

Java教程
第一章 Java入门
第二章 Java运算符和表达式
第三章 Java流程控制
第四章 Java类和对象
第五章 Java子类与继承
第六章 Java接口与实现
第七章 Java内部类与异常类
第八章 Java常用实用类
第九章 Java输入输出流
第十章 Java数组
Dotcpp在线编译      (登录可减少运行等待时间)