输入,输出流(三)

数组流

数组流: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类库绝大多数都是序列化的。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180205G1DDGX00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券