zoukankan      html  css  js  c++  java
  • review29

    数组流

    流的源和目的地除了可以是文件外,还可以是计算机内存。

    1.字节数组流

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

    ByteArrayInputStream的构造方法如下:

    ByteArrayInputStrem(byte[] buf);

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

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

    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类,字符数组流分别使用字符数组作为流的源和目标。

    代码展示如下所示:

    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.CharArrayReader;
    import java.io.CharArrayWriter;
    import java.io.IOException;
    
    public class Test01 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            
            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 e) {}
            
        }
    
    }

    程序运行之后,结果如下所示:

    解释上述代码:

    先创建字节数组输出流对象,然后将一个字节数组写入缓冲区中。

    将缓冲区中的字节数组转化后作为创建字节数组输入流对象的参数。创建输入流对象后,利用read(byte []b)方法将原先字节数组中的数据读入到b中再输出。

    字符数组输出流和输入流对象的创建过程类似。 

    ByteArrayOutputStream或ByteArrayInputStream不需要关闭流

  • 相关阅读:
    Busybox制作ARM(iTOP4412) 根文件系统
    01.高并发底层原理
    设计模式
    高并发实战
    # 记一次shell编写
    shell if条件语句
    scrapy使用
    整理JAVA知识点--基础篇,能力有限不足地方请大神们帮忙完善下
    mybatis-generator使用
    优先级队列实现
  • 原文地址:https://www.cnblogs.com/liaoxiaolao/p/9457132.html
Copyright © 2011-2022 走看看