当前位置: 代码迷 >> 综合 >> 【Java.IO】I/O 字节处理流 - 之- 基本Java数据类型操作流 —— DataInputStream, DataOutputStream
  详细解决方案

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

热度:25   发布时间:2023-12-14 19:40:46.0

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{// writebaos = new ByteArrayOutputStream();dos = new DataOutputStream(baos);dos.writeInt(n);dos.writeDouble(d);dos.writeUTF(str);dos.flush();// readbais = 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操作的顺序,将得到错误的结果。




  相关解决方案