Java中的io流

一、流的几种不同分类方法

(1)按方向分:输入流,输出流
(2)按处理数据类型分:字节流(最基础,最根本),字符流

(3)按功能分:节点流,处理流

二、几种不同的流详解

1.InputStream与OutputStream(为抽象类,不能实例化对象)

(1)InputStream(从文件到内存的流)

#三种读操作

abstract int  read()
int  read(byte[] b)

int  read(byte[] b, int off, int len)

(2)OutputStream(从内存到文件的流)

#三种写操作

①abstract void write (int b);

②void write(byte[ ]  b);

③void write(byte[ ] b, int off, int len);

2.FileInputStream与FileOutputStream

(1)FileInputStream(从文件到内存的流)

#构造函数

FileInputStream(File file); //为节点流

(2)FileOutputStream(从内存到文件的流)

#构造函数

FileOutputStream(File file);

3.DataInputStream与DataOutputStream(对数据进行处理)

(1)DataInputStream(到内存的流)

#构造函数

DataInputStream(InputStream in);

#几种读函数

boolean readBoolean();
byte readByte();
char readChar();
double readDouble();
float readFloat();
int readInt();
String readLine();

(2)DataOutputStream(从内存出发的流)

#构造函数

DataOutputStream(OutputStream out);

#几种写函数

void writeBoolean(boolean v);
void writeByte(int v);
void writeBytes(String s);
void writeChar(char v);
void writeChars(String s);
void writeDouble(double v);
void writeFloat(float v);
void writeInt(int v);

一个小例子:

FileInputStream fis = new FileInputStream("a.dat");
DataInputStream dis = new DataInputStream(fis);
int i = dis.readInt();
double d = dis.readDouble();
FileOutputStream fos = new FileOutputStream("b.dat");
DataOutputStream dos = new DataOutputStream(fos);
dos.writeInt(5);
dos.writeDouble(3.14);
dos.flush();
dos.close();
fos.close();

4.ObjectInputStream与ObjectOutputStream(处理流)

(1)ObjectInputStream

#读函数    Object readObject();

(2)ObjectOutputStream

#写函数    void writeObject(Object o);

注:若要将类对象逐个输入到流中,必须实现对象序列化接口,并且其聚合的类也要实现序列化接口(标签接口,只需声明即可implements java.io.Serializable)

5.ByteArrayInputStream与ByteArrayOutputStream(节点流)
(1)ByteArrayInputStream
字节数组输入流在内存中创建一个字节数组缓冲区,从输入流读取的数据保存在该字节数组缓冲区中。
#构造函数
ByteArrayInputStream(byte[ ] buf);
(2)ByteArrayOutputStream
字节数组输出流在内存中创建一个字节数组缓冲区,所有发送到输出流的数据保存在该字节数组缓冲区中。
#构造函数

ByteArrayOutputStream(int size);

深复制的小例子:

public class Tool {
	public static Object deepClone(Object o) {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		ObjectOutputStream oos = new ObjectOutputStream(baos);
		oos.writeObject(o);
		oos.flush();
		byte[] buffer = baos.toByteArray();
		ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
		ObjectInputStream ois = new ObjectInputStream(bais);
		return ois.readObject();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值