DataInputStream和DataOutputStream
过滤流,需要使用已经存在的节点流来构造,提供了读写Java中的基本数据类型的功能。
构造函数
DataOutputStream(OutputStream out)
Constructs a new DataOutputStream on the OutputStream out.
示例:
class StreamTest {
public static void main(String[] args) throws Exception{
//对文件的写入和对文件的读取
FileOutputStream fos = new FileOutputStream("1.txt");
//因为BufferedOutputStream构造函数要求是OutputStream对象,而FileOutputStream是OutputStream派生类
BufferedOutputStream bos = new BufferedOutputStream(fos);
//提供了读写Java中的基本数据类型的功能。
DataOutputStream dos = new DataOutputStream(bos);
//利用String对象的getBytes()获得字符数组
dos.writeByte(23);
dos.writeInt(88);
dos.writeBoolean(true);
dos.writeFloat(123f);
dos.writeChar('x');
dos.flush();
//bos.close();
FileInputStream fis = new FileInputStream("1.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
System.out.println(dis.readByte());
System.out.println(dis.readInt());
System.out.println(dis.readBoolean());
System.out.println(dis.readFloat());
System.out.println(dis.readChar());
bis.close();
}
}
结果:
23
88
true
123.0
x
PipedInputStream和PipedOutputStream
管道流,用于线程间的通信。一个线程的PipedInputStream对象从另一个线程的PipedOutputStream对象读取输入。要使管道流有用,必须同时构造管道输入流和管道输出流。
class pipedTest {
public static void main(String[] args){
PipedOutputStream pos = new PipedOutputStream();
PipedInputStream pis = new PipedInputStream();
try{
//谁connect谁都行
pos.connect(pis);
Product p = new Product(pos);
Consumer c = new Consumer(pis);
p.start();
c.start();
}catch(Exception e){
e.printStackTrace();
}
}
}
//往管道中写入数据
class Product extends Thread{
private PipedOutputStream pos;
Product(PipedOutputStream pos){
this.pos = pos;
}
public void run(){
try{
pos.write("hello pipedTest".getBytes());
pos.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
//从管道中读取到数据
class Consumer extends Thread{
private PipedInputStream pis;
Consumer(PipedInputStream pis){
this.pis = pis;
}
public void run(){
try{
byte[] b = new byte[100];
int len = pis.read(b);
System.out.println(new String(b,0,len));
pis.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
结果:
hello pipedTest