数据流的使用
数据流也是处理流的一种
数据流的作用:
为了方便的操作java语言中的基本数据类型和String类型的数据,可以使用数据流来进行操作
- 可以将我们java语言中的基本数据类型和String类型的数据持久化存储到硬盘中,需要的时候就可以使用数据输入流将硬盘中持久存储的数据读入到程序中
- 这里的持久化存储和我们单独对文本的存储是不一样的
- 我们持久化存储到硬盘中的文件不是直接打开看的,只是为了进行存储
- 打开看有的很多都会出现乱码 — 看不懂
数据流分为:
- DateInputStream
- DateInputStream一般是套接在InputStream类子类的对象上
- InputStream就是四大抽象基类之一: 字节输入流
- DateInputStream一般是套接在InputStream类子类的对象上
- DateOutputStream
- DateOutputStream一般是套接在OutputStream类的子类的对象上
- OutputStream就是四大抽象基类之一: 字节输出流
- 注意: 我们使用数据输出流写出数据之后要进行显示的flush()方法进行清空缓冲区
- DateOutputStream一般是套接在OutputStream类的子类的对象上
- 数据流只有字节流,没有字符流
注意: 我们使用数据输出流是按照什么顺序进行存储的,这个时候如果我们使用数据输入流读取时也要按照什么顺序进行读取
DateInputStream中的方法:
boolean readBoolean();
byte readByte();
short readShort();
int readInt();
char readChar();
float readFloat();
double readDouble();
long readLong();
String readUTF();
- 读取字符串
void readFully(byte[] b);
- 读取byte[]
DateOutputStream中的方法
void writeBoolean();
void writeByte();
void write Short();
void writeInt();
void writeChar();
void writeFloat();
void writeDouble();
void writeLong();
void writeUTF();
void writeBytes(String s);
这里我们通过两个程序来理解数据流的实际使用
- 首先我们使用数据输出流将内存中的基本数据类型值,字符串写出到文件中
package IO流.数据流;
import java.io.FileOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class Demo1 {
public static void main(String[] args) throws IOException{
/*
创建数据流对象
*/
DataOutputStream dos = new DataOutputStream(new FileOutputStream("hihi.dat"));
/*
调用数据输出流对象的写出数据的方法,将有的基本类型的数据和String类型的数据写出到硬盘中的文件中
注意: 这个时候我们只是使用硬盘中的文件对我们程序中的基本数据类型和String类型的数据进行了一个持久化的操作
这个时候我们写出到文件中只是为了持久化的存储,也就是如果程序中下一次要使用,就可以直接从文件中读取出来,
这个时候写出到文件中的数据我们是看不懂的,也不是用来直接打开看的
*/
dos.writeInt(13);
dos.writeBoolean(true);
dos.writeUTF("飞飞");
/*
手动调用flush()方法清空缓冲区
*/
dos.flush();
/*
流资源的关闭
*/
dos.close();
}
}
- 其次这里我们使用数据输入流将硬盘中我们持久存储的文件进行读取,读取到内存中来
package IO流.数据流;
import java.io.FileInputStream;
import java.io.DataInputStream;
import java.io.IOException;
public class Demo2 {
public static void main(String[] args) throws IOException{
/*
创建数据输入流对象
*/
DataInputStream dis = new DataInputStream(new FileInputStream("hihi.dat"));
/*
使用数据输入流中的read()方法将数据从硬盘中读取到内存中来
注意: 这个时候读取的顺序要和当时存储的顺序一致
eg:我们第一个存储的是int类型的13,第二个存储的是boolean类型的true,第三个存储的是String类型的"飞飞"
这个时候如果我们要读取,这个时候也是要按照这个顺序来,第一个是int,第二个是boolean,第三个是String
*/
int i = dis.readInt();
System.out.println(i);
boolean b = dis.readBoolean();
System.out.println(b);
String s = dis.readUTF();
System.out.println(s);
/*
流资源的关闭 (我们关闭了外层流,就不需要再关闭内层流,因为内层流会随着外层流的关闭而关闭)
*/
dis.close();
}
}