ByteArrayOutputStream以及DataOutputStream的组合使用

DataOutputStreamByteArrayOutputStream组合起来可以实现序列化,那么如何进行组合起来呢?


@Test
    public void testDataOutputStreamAndDataInputStream() throws IOException {
        ByteArrayOutputStream bOutputStream = new ByteArrayOutputStream();
        DataOutputStream dataOutputStream = new DataOutputStream( bOutputStream );
        String name = "ming";
        int age = 2;
        dataOutputStream.writeInt( 0 );
        dataOutputStream.writeUTF( name );
        dataOutputStream.writeInt( age );
        dataOutputStream.writeLong( 4 );
        byte[] bytes = bOutputStream.toByteArray();
        ByteBuffer byteBuffer = ByteBuffer.wrap( bytes );
        ByteArrayInputStream bInputStream = new ByteArrayInputStream( bytes );
        DataInputStream dataInputStream = new DataInputStream( bInputStream );
        dataInputStream.readInt();
        String userName = dataInputStream.readUTF();
        Integer userAge = dataInputStream.readInt();

        Long longValueLong = dataInputStream.readLong();
        System.out.println( "userName:" + userName );
        System.out.println( "userAge: " + userAge );
        System.out.println( " longValue:" + longValueLong );
    }

    我们可以看到将ByteArrayOutputStream传入DataOutputStream,就可以实现序列化,并且写入的顺序和读入的顺序必须一致,否则会出现错误。例如我们先写入一个int类型的数据,那么当我们读的时候也首先读出来一个int类型的数据。在ZooKeeper的序列化组件jute中就用到了ByteArrayOutputStream和DataOutputStream组合。
    那么如何实现的?ByteArrayOutputStream是面向字节,当我们使用DataOutputStream可以面向java简单的数据类型,那么为什么会这样的,因为在DataOutputStream里面做了一个简单的转化,例如写入一个int的时候,就转化为4个字节然后依次写入。类似的 DataInputStream里面读取一个int的时候,然后连续读取4个字节,然后拼装成一个int。其他基本数据类型一样。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值