Java I/O流(二)

来源:互联网 发布:小站托福tpo mac版 编辑:程序博客网 时间:2024/05/17 04:11

      本节将介绍主要的流类

      管道流PipedReader,PipedWriter

      这里只介绍管道字符流,字节流PipedInputStream,PipedOutputStream类同。什么是管道流呢?管道流可以在线程间通信,输入流和输出流相连后便形成了管道。两线程间不共享数据,有别于共享数据通信。下图如示

    

     管道流连接方式,即输入流与输出流相连接形成管道,而且输入流和输出流在不同线程中操作。以PipedReader示例,两种方式连接:

             直接使用构造函数PipedReader(PipedWriter src);PipedReader(PipedWriter src, int pipeSize);
             使用方法void connect(PipedWriter src);   

 代码示例

    分别定义了发送线程,接收线程。

public class TestPipe {static class SendThread extends Thread{private PipedWriter pipedWriter = null;private String sendMessage = null;;public SendThread(String message){this.setName("SendThread");this.sendMessage = message;this.pipedWriter = new PipedWriter();}public void run(){try {pipedWriter.write(sendMessage);pipedWriter.close();} catch (Exception e) {e.printStackTrace();}}public PipedWriter getPipedWriter() {return pipedWriter;}}static class RevicerThread extends Thread{private PipedReader pipedReader = null;public RevicerThread(){this.setName("RevicerThread");this.pipedReader =  new PipedReader();}public void run(){try {LineNumberReader lnr = new LineNumberReader(pipedReader);String line = lnr.readLine();lnr.close();pipedReader.close();System.out.println("接收线程RevicerThread接收到消息:"+line);} catch (Exception e) {e.printStackTrace();}}public PipedReader getPipedReader() {return pipedReader;}}public static void main(String[] args) {try {SendThread sender = new SendThread("这是发送线程sendTread发送的消息.");RevicerThread revicer = new RevicerThread();sender.getPipedWriter().connect(revicer.getPipedReader());sender.start();revicer.start();} catch (Exception e) {e.printStackTrace();}}}

连接多个流SequenceInputStream

    表示多个输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。不再给出示例。

可以回推的输入流PushBackInputStream,PushbackReader

        即可以对已读出的数据重新回推到输入流,下次读取的时候重新读取。例子待续。

对象序列化流

 

      这里只给出ObjectInputStream继承关系图,ObjectOutputStream类似。想详细了解Java序列化请看《Java对象序列化》章节。
原创粉丝点击