【Java.IO】I/O 字节处理流 - 之- 基本Java数据类型操作流 —— DataInputStream, DataOutputStream

DataInputStream,DataOutputStream主要用于基础Java数据类型数据的序列化/反序列化;将基本的Java数据类型数据与二进制字节相互转化;

例如,我们可以利用DataOutputStream.writeUTF(String s)方法,直接将一个String对象写入一个字节输出流中,之后再利用DataInputStream.readUTF()方法将String对象直接读取出来。简化了中间转换的操作。

注意:读取和写入的顺序应该一致,否则会导致错误的数据拆分。


  • DataInputStream

public class DataInputStream
extends FilterInputStream
implements DataInput

从一个底层字节input stream中读取Java基础数据类型(byte char int double, .etc)的数据;

使用data output stream写入的数据可以使用data input stream读取;


  • DataOutputStream
public class DataOutputStream
extends FilterOutputStream
implements DataOutput


向一个底层的字节output stream中写入Java基础数据类型(byte char int double, .etc)的数据;

使用data output stream写入的数据可以使用data input stream读取;



使用示例:

我们将首先创建一个内存(字符数组)输出流,用于向其中写入数据;然后利用DataOutputStream向其中直接写入基础数据类型的Java对象,之后再利用DataInputStream从其中直接读取出对应的Java对象;

package com.gof.io.test;

import java.io.ByteArrayOutputStream;
import java.io.ByteArrayInputStream;
import java.io.DataOutputStream;
import java.io.DataInputStream;

public class DataInputAndOutputApp {

	public static void main(String[] args){
		ByteArrayOutputStream baos = null;
		ByteArrayInputStream bais = null;
		DataOutputStream dos = null;
		DataInputStream dis = null;
		
		int n = 10;
		double d = 12.05;
		String str = "test string";
		
		try{
			// write
			baos = new ByteArrayOutputStream();
			dos = new DataOutputStream(baos);
			
			dos.writeInt(n);
			dos.writeDouble(d);
			dos.writeUTF(str);
			
			dos.flush();
			
			// read
			bais = new ByteArrayInputStream(baos.toByteArray());
			dis = new DataInputStream(bais);
			
			System.out.println("The int is: " + dis.readInt());
			System.out.println("The double is: " + dis.readDouble());
			System.out.println("The String is: " + dis.readUTF());
		}catch (Exception e){
			e.printStackTrace();
		}finally{
			try{
				dis.close();
				dos.close();
				bais.close();
				baos.close();
			}catch (Exception e){
				e.printStackTrace();
			}
		}
	}
}

输出结果:

<span style="font-family:SimSun;"><span style="font-size:10px;">The int is: 10
The double is: 12.05
The String is: test string
</span></span>


如果调整readXXX操作的顺序,将得到错误的结果。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值