zoukankan      html  css  js  c++  java
  • Java IO(七)ByteArrayInputStream 和 ByteArrayOutputStream

    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();     }   } }
  • 相关阅读:
    WPF 动态更改启动窗体startupUri
    WPS中DataGrid无故多一行空白行
    wpf 查找Control Template内部控件
    WPF DataGridTemplateColumn添加按钮
    WPF中使用DataGrid时操作列按钮问题
    c#前台线程与后台线程的区别和联系
    WPF中进度条
    Dispatcher.Invoke方法
    WSS、SSL 和 https 之间的关系
    WPF 设置程序不允许多开
  • 原文地址:https://www.cnblogs.com/lingq/p/12920189.html
Copyright © 2011-2022 走看看