如何从outputStream中读取内容

时间:2016-04-02 16:28:30

标签: java

如何将OutputStream中的内容读取到字节数组或输入流。

我有一些数据写入StreamingOutput,我需要从另一个进程读取这些数据。

2 个答案:

答案 0 :(得分:1)

您写入输出流并从输入流中读取。 如果你是想要一个单独的线程写入输出流,而另一个线程正在从输入流中读取该数据,您可以使用管道流。

public static void main(String[] args) throws Exception {
    executor = Executors.newFixedThreadPool(1);
    PipedInputStream inputStream = new PipedInputStream();
    OutputStream outputStream = new PipedOutputStream(inputStream);

    executor.submit(new Runnable() {

        @Override
        public void run() {
            for (char c = 'a'; c <= 'z'; ++c) {
                try {
                    IOUtils.write("abcdefghijklmnopqrstuvwxyz".getBytes(), outputStream);
                } catch (IOException e) {
                    // error
                } finally {
                    IOUtils.closeQuietly(outputStream);
                }
            }
        }
    });

    String string = IOUtils.toString(inputStream);
    System.out.println(string);
}

请注意,只有在异步读取/写入数据时才能使用此功能。

答案 1 :(得分:1)

Java IO概述

术语“输入”和“输出”有时会有点混乱。应用程序的一部分的输入通常是另一部分的输出。

需要从某些来源读取数据的程序需要 InputStream 。需要将数据写入某个目的地的程序需要 OutputStream

InputStream或Reader链接到数据源。 OutputStream或Writer链接到数据的目标。

示例源代码

package fileio;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileReadWrite {

    void writeToFile() throws IOException{
        byte[] data = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'};
        OutputStream output = new FileOutputStream("/Users/suparna/var/testfile.txt");
        try {
            output.write(data);
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            output.close();
        }
    }

    void readFromFile() throws IOException{
        InputStream inputstream = new FileInputStream("/Users/suparna/var/testfile.txt");
        int data;
        try {
            data = inputstream.read();
            while(data != -1) {
                doSomethingWithData(data);
                data = inputstream.read();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally{
            inputstream.close();
        }
    }

    private void doSomethingWithData(int data) {
        System.out.println(data);
    }

    public static void main(String[] args) {
        FileReadWrite rw = new FileReadWrite();
        try {
            rw.writeToFile();
            rw.readFromFile();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}