如何将OutputStream中的内容读取到字节数组或输入流。
我有一些数据写入StreamingOutput,我需要从另一个进程读取这些数据。
答案 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)
术语“输入”和“输出”有时会有点混乱。应用程序的一部分的输入通常是另一部分的输出。
需要从某些来源读取数据的程序需要 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();
}
}
}