DataOutputStream、DataInputStream、ByteArrayOutputStream、ByteArrayInputStream

本文详细介绍了Java中DataOutputStream和DataInputStream的使用方法,包括如何将特定格式的数据写入内存流及从内存流中读取数据。通过具体实例展示了如何使用这些流来处理UTF-8编码的字符串和整数。
摘要由CSDN通过智能技术生成
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值