zoukankan      html  css  js  c++  java
  • DataOutputStream、DataInputStream、ByteArrayOutputStream、ByteArrayInputStream简介

    ByteArrayOutputStream是向内存中写入流数据
    ByteArrayInputStream是从内存中如数据
    例如:
    ByteArrayInputStream arrayInputStream =new ByteArrayInputStream("连".getBytes());
    这就从内存中读取流数据;
    然后用read方法就可以读出数据了;
    同样的道理
    ByteArrayOutputStream arrayOutputStream =new ByteArrayOutputStream();
    arrayOutputStream.write(97);
    arrayOutputStream.write(98);
    byte[] bs =arrayOutputStream.toByteArray();
    可以像内存中写数据,通过arrayOutputStream.toByteArray();获取到写的数据

    然后引入了DataOutputStream、DataInputStream;
    他们的作用就是格式化。因为我们的流操作的都是byte字节。这种可读性很差的。
    而DataOutputStream、DataInputStream提供了很多读取数据的方法
    如in.readUTF()、in.readInt()。。。。
    下面是一个例子,把“连”写入到内存中

    ByteArrayOutputStream arrayOutputStream =new ByteArrayOutputStream();
    DataOutputStream out =new DataOutputStream(arrayOutputStream);
    out.writeUTF("连");

    byte[] bs =arrayOutputStream.toByteArray();
    然后我们通过数据取到的是
    0
    3
    -24
    -65
    -98
    后三位是"连"的utf-8编码。前两位我也不知道是什么,第二位好像是字节数,如果两个字的话就是6.(好像是)
    但是:
    ByteArrayInputStream arrayInputStream =new ByteArrayInputStream("连".getBytes());
    DataInputStream in =new DataInputStream(arrayInputStream);

    System.out.println(in.readUTF());
    就会出错。主要原因为我认为这样写  流的源里面没有 0 和3。于是我改进如下:
    byte[] bs1 ={0,3,-24,-65,-98};
    ByteArrayInputStream arrayInputStream =new ByteArrayInputStream(bs1);
    DataInputStream in =new DataInputStream(arrayInputStream);

    System.out.println(in.readUTF());
    完全就没有问题了。
    看来真是这个原因。

    还有一个问题就是:
    ByteArrayOutputStream arrayOutputStream =new ByteArrayOutputStream();
    DataOutputStream out =new DataOutputStream(arrayOutputStream);
    out.writeInt(1200);

    byte[] bs =arrayOutputStream.toByteArray();
    for(byte b:bs)
    {
    System.out.println(b);
    }
    打印结果是
    0
    0
    4
    -80
    这里打印出来的是16进制
    也就是4*(16^2)+(256-80)=1024+176=1200

  • 相关阅读:
    全面了解Nginx主要应用场景
    手把手教你构建 C 语言编译器
    Docker镜像原理和最佳实践
    Docker网络深度解读
    PostgreSQL 10.0 preview 功能增强
    阿里沈询:分布式事务原理与实践
    CPU、内存、IO虚拟化关键技术及其优化探索
    原理、方法双管齐下,大神带你细解Redis内存管理和优化---场景研读
    ASP.NET 5已终结,迎来ASP.NET Core 1.0和.NET Core 1.0 转
    RabbitMQ学习系列
  • 原文地址:https://www.cnblogs.com/qingblog/p/2550811.html
Copyright © 2011-2022 走看看