数组流
数组流:ByteArrayInputStream,ByteArryOutputStream分别使用字节数组作为流的源和目的地。所以它们的源和目的地可以是内存(即缓冲区);
构造方法:
ByteArrayInputStream(byte[]buf);
ByteArrayInputStream(byte[]buf,int offset,int length);
ByteArrayOutputStream();
ByteArrayOutputStream(intsize);
说明:
1的源是参数buf指定的数组的全部字节单元。
2的源是buf数组从offset开始然后截取length个字节单元。
3的流的指向一个默认32字节的缓冲区。
4指向的缓冲区的大小由size指定。
输入输出:
输入流调用public int read();顺序的从源中读出一个字节,并返回对出的字节。调用public int read(byte[] b,int off,int len);方法可以顺序的从源中读取len指定的字节数,并将读到的字节存放到b中,off指定放到b中的起始位置。方法返回读出的字节数,没有读到则返回-1.
输出流调用public voidwrite(int b);方法可顺序的向缓冲区写入一个字节。调用public void write(byte[]b,int off,int len);可将b中的从off位置顺序写入len字节到缓冲区中。调用public byte[] toByteArray();可以返回输出流写入到缓冲区的全部字节。
注:执行时可能会发生IOException,所以要放在try,catch中。
示列,将"flytree"写入到缓冲区中,再将其读出:
importjava.io.*;
publicclassbyteArrayTest {
publicstaticvoidmain(String[]args) {
byteb[]="flytree".getBytes();
bytein[] =newbyte[b.length];
try{
ByteArrayOutputStreamoutbyte=newByteArrayOutputStream();
outbyte.write(b);
ByteArrayInputStreaminbyte=newByteArrayInputStream(outbyte.toByteArray());
inbyte.read(in);
}catch(IOExceptione) {
e.printStackTrace();
}
}
}
数据流
数据流:DataInputStream和DataOutputStream它们可以按机器无关风格读取Java原始数据。是上层流,底层流为FileInputStream和FileOutputStream。
所在包:java.io.DataInputStream和java.io.DataOutputStream
构造方法:
DataInputStream(InputStream file)
DataOutputStream(OutputStream file)
DataInputStream和DataOutputStream的部分类方法:
close()关闭流
readUTF();读一个UTF字符串
readInt();读一个int值
readChar();读一个字符
writeChars(String s);写入字符串
writeInt(int v);写入一个int值
writeUTF(String s);写入一个UTF字符串
对象流
对象流:ObjectInputStream,ObjectOutputStream分别是InputStream和OutputStream的子类。
构造方法:
ObjectInputStream(InputStreamin)
ObjectOutputStream(OutputStreamout)
使用writeObject(Objectobj)将一对象写入到文件中
使用readObject(Objectobj)将一对象读到程序中。
注:当使用对象输入,输出流是应保证对象是序列化的。实现了Serializable接口的类的对象就是序列化的对象,Java类库绝大多数都是序列化的。
领取专属 10元无门槛券
私享最新 技术干货