版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fighting123678/article/details/84260370
1、DataInputStream和DataOutputStream都是处理流
1、实例1:TestDataStream
(1)存和读的顺序相同
import java.io.*;
/*
* 功能:最基本的数据流实例
* 往文件TestDataSteam.dat中直接写入数据,然后读出数据,并打印到控制台
**/
public class TestDataStream
{
public static void main(String[] args)
{
DataOutputStream dos=null;
DataInputStream dis=null;
try
{
dos=new DataOutputStream(new FileOutputStream("data.dat"));
dos.writeDouble(3.1415926);//存取单元是基本类型,所以写了个double进去
dos.writeBoolean(true);
dis=new DataInputStream(new FileInputStream("data.dat"));
System.out.println(dis.readDouble());
System.out.println(dis.readBoolean());
}
catch(IOException e)
{
e.printStackTrace();
}
finally
{
try
{
dos.close();
dis.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}
存和读的顺序相同,结果是
(2)存和读的顺序不同
import java.io.*;
/*
* 功能:最基本的数据流实例
* 往文件TestDataSteam.dat中直接写入数据,然后读出数据,并打印到控制台
**/
public class TestDataStream
{
public static void main(String[] args)
{
DataOutputStream dos=null;
DataInputStream dis=null;
try
{
dos=new DataOutputStream(new FileOutputStream("data.dat"));
dos.writeDouble(3.1415926);//存取单元是基本类型,所以写了个double进去
dos.writeBoolean(true);
dis=new DataInputStream(new FileInputStream("data.dat"));
//System.out.println(dis.readDouble());
System.out.println(dis.readBoolean());
System.out.println(dis.readDouble());
}
catch(IOException e)
{
e.printStackTrace();
}
finally
{
try
{
dos.close();
dis.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}
存和读的顺序不同,结果是数是有的,但是数和存的时候不一样
(3)打开data.dat文件是乱码的,因为写的时候是用字节流的形式写的,不是纯文本的方式往里写的,而是采用二进制方式存的,所以用记事本打开的话,是不对的。
(4)为什么存和读的顺序不同的话,结果与存和读的顺序一致时不同呢?
- 与文件结构和程序相关。因为,先存double再存boolean,相当于文件内部的一种私有结构,是一种私有的文件组织方式,这种顺序只有这个程序能够读到。
- 与程序相关,只有这种程序才能打开这种文件,如果程序内部格式不公开的话,别的人或者别的程序是无法打开这种文件的,只有软件的开发人员才能知道文件的结构。不同的操作系统中有很多文件,每种文件都有一种特定的、关联的、打开这种文件的一种软件,因为只有这种软件才能识别这种文件结构,如果识别不了的话,打不开。
- 所以这个例子中,现有double后有boolean就是这个文件的一种私有格式。