JAVA--数据流

39 篇文章 0 订阅
9 篇文章 0 订阅
本文介绍了Java中的DataInputStream和DataOutputStream类,它们用于以机器无关的方式读写基本类型和字符串数据。示例代码展示了如何使用DataOutputStream将long型数据写入ByteArrayOutputStream,然后使用DataInputStream从byte数组中读回原始数据。
摘要由CSDN通过智能技术生成

(一)定义

DataInputStream

能够以一种与机器无关的方式,直接从底层字节输入流读取java的基本类型和String类型的数据,为包裹流;

DataOutputStream

能够以一种与机器无关的方式,直接将java的基本类型和String类型数据写出到其它的字节输出流,为包裹流;

(二)常用方法

DataInputStream

构造方法:public DataInputStream(InputStream in);

普通方法:public final 数据类型 read首字符大写数据类型();

DataOutputStream

构造方法:public DataOutputStream(OutputStream in);

普通方法:public final 数据类型 write首字符大写数据类型();

public class TestData
{
	public static void main(String args[]) throws Exception
	{
		long n = 9876543210L;
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		//public ByteArrayOutputStream(): 创建一个新的 byte 数组输出流。缓冲区的容量最初是 32 字节,如有必要可增加其大小。 
		//执行后在内存中生成了一个大小为32个字节的byte数组并有一根叫做baos的管道已链接到了该byte数组中,并且可以通过这个管道向该byte数组中写入数据
		//虽然此时可以通过baos向baos所连接到的在内存中分配好的byte数组中写入数据,但是ByteArrayOutputStream流并没有提供可以直接把long类型数据直接写入ByteArrayOutputStream流所连接到的byte数组中的方法, 
		//简单说我们没法通过baos向baos所连接到的byte数组中写入long类型的数据, 查API文档可以发现: ByteArrayOutputStream流中并没有类似writeLong()这样的方法,但是DataOutputStream流中却有writeLong() writeFloat()等方法
		DataOutputStream dos = new DataOutputStream(baos);
		
		dos.writeLong(n); 
		
		
		dos.flush();
		byte[] buf = baos.toByteArray(); 
		//DataOutputStream 流中并没有toByteArray()方法,但是ByteArrayOutputStream 流中却有toByteArray()方法, 所以不可以把baos 改为dos,否则编译时会出错! ByteArrayOutputStream流中toByteArray()方法的含义,摘自API“创建一个新分配的 byte 数组。其大小是此输出流的当前大小,并且缓冲区的有效内容已复制到该数组中”

		//利用ByteArrayInputStream 和 DataInputStream 可以从byte数组中得到原long类型的数值10000L
		ByteArrayInputStream bais = new ByteArrayInputStream(buf);
		DataInputStream dis = new DataInputStream(bais);
		long l = dis.readLong();

		System.out.println("l = " + l);
		dos.close();
	}
}

输出:9876543210

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值