No.19 字节数组流

java.IO中提供了ByteArrayInputStream/ByteArrayOutputStream字节数组输入输出流。
其实质是在用,数组的思想来操作读写操作。

在进行IO操作的时候我们可以大概分为三个对象:
控制台:System.in/System.out
硬盘:FileStream(包括字节流和字符流输入输出)
内存:ArrayStream(包括字节流中的ByteArray,字符流中的CharArray)。


ByteArrayOutputStream的用法:

(1)ByteArrayOutputStream,从某一输入流中获取字节数据,调用write(int var)方法写入内部缓冲区。此方法由于没有操作底层数据所以不许要关闭流,即使被关闭也可以再次被调用。
(2)ByteArrayOutputStream有两个构造参数,空参数的构造参数提供一个默认的可变的缓冲区,另一构造参数OutputStream out = new ByteArrayOutputStream(int a)提供一个指定大小的缓冲区的初始值
(3)public byte[] toByteArray()/public String toString()两个方法提供了将缓冲区内容输出的方法。
(4)public void writeTo(OutputStream os)提供了将缓冲去内的内容一次性写入一个输出流中的方法,这里可以是硬盘也可以是控制台。
(5)实例:

public class Test {

public static void main(String[] args) {
    ByteArrayInputStream bis = null;
    ByteArrayOutputStream bos = null;
    
    bis = new ByteArrayInputStream("ABCDEFG".getBytes());
    //这里不指定缓冲区大小。
    bos = new ByteArrayOutputStream();//初始化长度为0
    //这里指定缓冲区大小
    //bos = new ByteArrayOutputStream(1);//初始化长度为1
    
    int b = 0;
    while((b = bis.read()) != -1){
        bos.write(b);
    }
    
    //写入缓冲区后可以查看缓冲区大小,也可以查看缓冲区内容
    System.out.println(bos.size());//7
    byte[] be = bos.toByteArray();
    for(byte bt : be){
        System.out.print(bt + " ");//65 66 67 68 69 70 71 
    }
    System.out.println();
    System.out.println(bos.toString());//ABCDEFG
    //将缓冲区内写入一个outputStream流中字节数组流中只有这个方法会报异常
    try {
        bos.writeTo(new FileOutputStream("d://text.txt"));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
  }
}

ByteArrayInputStream的用法:

(1)ByteArrayInputStream对象接受一个字节数组作为参数。如果需要存放的数据很多可以提前声明一个指定大小的数组,如果不多可以直接同过相应的转化获取如:string类的getByte()方法。
(2)该字节数组的内容来源可以是一个文件的输入流中数据,通过read(buf)方法得到的字节数据,也可同过string类的getByte()方法直接的的到一个。
(3)字节数组输如流的的操作方法同其他输入流一样,通过循环判断read返回值来输出数组中的内容,每次从缓冲buf中获取一个字节数据。

(4)应用实例:

public class Test {

public static void main(String[] args) {
    FileInputStream fis= null;
    ByteArrayInputStream bis = null;
    
    try {
        fis = new FileInputStream("D://text.txt");
        //确定缓冲区数组大小
        byte[] buf = new byte[512];
        bis = new ByteArrayInputStream(buf);
        //将文件写入缓存区,调用fileInputSream的read(Byte[] b)方法
        fis.read(buf);
        //读取ByteArrayInputStream缓冲区数组中的内容
        int i = 0;
        while((i = bis.read()) != -1){
            System.out.println((char)i);
        }
        //不用关闭bis流
        fis.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    
  }
}

总结

(1)从继承关系来看字节数组流直接继承自基类InputStream和OutputStream,他起到的作用看来起到了 装饰/提高效率的作用。
(2)这两个IO类,其实起到了从控制台,或者硬盘(文件)读取流到内存中的作用。
FileInputStream -> ByteArrayOutputStream ->FileOutputsStream
FileInputStream -> ByteArrayInputStream ->System.out

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容

  • Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符...
    布鲁斯不吐丝阅读 689评论 0 4
  • 1 IO(三)No20 1.1Properties 属性集 【 Properties属性集,主要用于操作配置属...
    征程_Journey阅读 887评论 0 1
  • 1 I/O流的分类 按照流:输入流输出流输出流 按照数据处理单位不同 字节流一次读入或者是读取八位二进制,后缀为...
    司鑫阅读 2,459评论 0 4
  • 因为百度的加载动画不是经常出现,以前就想做一个,今天有时间做了一个类似效果的加载动画,给大家分享一下。 这是百度的...
    但但但丶阅读 1,234评论 1 5
  • 残雪浸瑶琼,尺素侵幽静。闲向梅花树下行,步月寻疏影。 缥缈掩娉婷,姿绰绝妆靓。白露丝寒锁暗香,水阔霜华冷
    风十二阑阅读 690评论 4 7