Java IO(七)ByteArrayInputStream 和 ByteArrayOutputStream

一、介绍

ByteArrayInputStream 和 ByteArrayOutputStream 是字节数组输入 / 输出流。他们分别继承于 InputStream 和 OutputStream 。

(一)、ByteArrayInputStream

ByteArrayInputStream 是字节数组输入流。它包含一个内部缓冲区,该缓冲区包含从流中读取的字节;通俗点说,它的内部缓冲区就是一个字节数组,而ByteArrayInputStream本质就是通过字节数组来实现的。
我们都知道,InputStream 通过 read() 向外提供接口,供它们来读取字节数据;而 ByteArrayInputStream 的内部额外的定义了一个计数器,它被用来跟踪 read() 方法要读取的下一个字节。

(二)、ByteArrayOutputStream

ByteArrayOutputStream 是字节数组输出流。ByteArrayOutputStream 中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。

二、构造方法

(一)、ByteArrayInputStream

(二)、ByteArrayOutputStream

三、常用API

(一)、ByteArrayInputStream

(二)、ByteArrayOutputStream

四、实例

public static void main(String[] args) {
  write();
  read();
} /**
* ByteArrayOutputStream
*/
private static void write() {
  ByteArrayOutputStream out = null;
  byte[] buffer = "abcdefghijklmnopqrstuvwxyz".getBytes();
  try {
    out = new ByteArrayOutputStream();
    out.write(99);
    System.out.println("out = " + out);     out.write(buffer, 5, 5);
    System.out.println("out = " + out);     int size = out.size();
    System.out.println("size = " + out);     byte[] b = out.toByteArray();
    System.out.println("byteArray = " + new String(b));     String str = out.toString();
    System.out.println("str = " + str);     ByteArrayOutputStream out2 = new ByteArrayOutputStream();
    out.writeTo((OutputStream)out2);
    System.out.println("out2 = " + out2);     out.reset();
  } catch (Exception e) {
    e.printStackTrace();
  }finally {
    try {
      if(out != null) {
        out.close();
      }
    }catch(Exception e) {
      e.printStackTrace();
    }
  }
} /**
* ByteArrayInputStream 测试函数
*/
private static void read() {
  ByteArrayInputStream in = null;
  byte[] buffer = "abcdefghijklmnopqrstuvwxyz".getBytes();
  try {
    in = new ByteArrayInputStream(buffer);
    for (int i = 0; i < 5; i++) {
      if(in.available() >= 0) {
        char ch = (char) in.read();
          System.out.println(ch);
      }
    }
    in.skip(5);     byte[] bu = new byte[10];
    in.read(bu);
    System.out.println(new String(bu));     in.reset();     in.read(bu, 0, 8);
    System.out.println(new String(bu));
  } catch (Exception e) {
    e.printStackTrace();
  }finally {
    try {
      if(in != null) {
        in.close();
      }
    }catch(Exception e) {
      e.printStackTrace();
    }
  }
}

最新文章

  1. Date、Calender类及日期和字符串转换
  2. jquery和dom之间的转换
  3. $(document).click() 在苹果手机上不能正常运行
  4. Java笔记1-Java相关概念和如何实现跨平台
  5. hadoop的dfs工具类一个【原创】
  6. history命令显示出详细时间
  7. SQL生成随机数
  8. IOS开发-phonegap上的数据库
  9. Linux学习笔记25——命名管道(FIFO)
  10. 网页制作之JavaScript部分3--事件及事件传输方式(函数调用 练习题 )重要---持续更新中
  11. 如何关闭常见浏览器的 HSTS 功能
  12. Android屏幕适配-android学习之旅(五十九)
  13. iOS在GitHub Top 前100 简介
  14. drf框架之 路飞学城(第二天)
  15. fiddler 实现代理的操作
  16. promise对象的回调函数resolve的参数为另一个promise对象
  17. JDK8中的时间API
  18. jQuery在线引用地址(全)
  19. 2018.09.15 poj1041John's trip(欧拉路输出方案)
  20. 我的开源项目——Jerry

热门文章

  1. 一只简单的网络爬虫(基于linux C/C++)————Url处理以及使用libevent进行DNS解析
  2. MySQL 入门(2):索引
  3. redis关闭报没有权限No auth
  4. 【Spark】SparkStreaming与flume进行整合
  5. 【HBase】通过Bulkload批量加载数据到Hbase表中
  6. PHP导出excel文件之权限字段筛选导出
  7. LeetCode最长回文子串
  8. C#操作时区转换时遇到的一些问题和解决方法分享
  9. Shiro+Mybatis实现登录认证、授权功能
  10. 曾经你说chrome浏览器天下第一,现在你却说Microsoft edge真香!呸,渣男!!