解决方案 »

  1.   


    package com.test;import java.io.IOException;
    import java.io.InputStream;
    import java.io.PipedInputStream;
    import java.io.PipedOutputStream;
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    import java.util.concurrent.TimeUnit;
    import java.util.concurrent.TimeoutException;public class MyTest { /**
     * @param args
     */
    static void read(final InputStream inputStream, final byte[] b) {
    int readByte = 1;
    // Read data with timeout
    ExecutorService executor = Executors.newFixedThreadPool(2);
    Callable<Integer> readTask = new Callable<Integer>() {
    @Override
    public Integer call() throws Exception {
    return inputStream.read(b, 0, b.length);
    }
    };
    Future<Integer> future = executor.submit(readTask);
    try {
    readByte = future.get(2000, TimeUnit.MILLISECONDS);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (ExecutionException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (TimeoutException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    future.cancel(true); System.out.println("End!!!");
    executor.shutdown();
    } public static void main(String[] args) {
    // TODO Auto-generated method stub
    final PipedOutputStream outputStream = new PipedOutputStream();
    PipedInputStream inputStream = null;
    try {
    inputStream = new PipedInputStream(outputStream);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } Runnable writeTask = new Runnable() {
    @Override
    public void run() {
    try {
    String buf = "caonima"; Thread.sleep(2000);
    outputStream.write(buf.getBytes());
    buf = "hehe";
    outputStream.write(buf.getBytes());
    outputStream.write(3); Thread.sleep(5000);
    outputStream.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    System.out.println("Write end!");
    }
    };
    Thread thread = new Thread(writeTask);
    thread.start();
    byte[] b = new byte[100];
    read(inputStream, b);
    System.out.println("Result:" + new String(b));
    }}还是自己解决了吧