java-I/O File类(4)-DataInputStream和DataOutputStream/PipedInputStream和PipedOutputStream

来源:互联网 发布:做数据分析要掌握什么 编辑:程序博客网 时间:2024/06/05 09:34

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();    }}

结果:

2388true123.0x

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

0 0