此页面:http://blog.ostermiller.org/convert-java-outputstream-inputstream 描述了如何从OutputStream创建InputStream:
new ByteArrayInputStream(out.toByteArray())
Run Code Online (Sandbox Code Playgroud)
其他替代方案是使用PipedStreams和新线程,这很麻烦.
我不喜欢将许多兆字节复制到内存字节数组中的新内容.有没有一个库可以更有效地完成这项工作?
编辑:
根据Laurence Gonsalves的建议,我尝试了PipedStreams,事实证明它们并不难以应对.这是clojure中的示例代码:
(defn #^PipedInputStream create-pdf-stream [pdf-info]
(let [in-stream (new PipedInputStream)
out-stream (PipedOutputStream. in-stream)]
(.start (Thread. #(;Here you write into out-stream)))
in-stream))
Run Code Online (Sandbox Code Playgroud) 我想使用Gzip压缩在java中压缩输入流.
假设我们有一个未压缩的输入流(1GB数据..).我希望结果来自源的压缩输入流:
public InputStream getCompressedStream(InputStream unCompressedStream) {
// Not working because it's uncompressing the stream, I want the opposite.
return new GZIPInputStream(unCompressedStream);
}
Run Code Online (Sandbox Code Playgroud) 我可以做一些事情:
-Djava.util.logging.loglevel=FINE
Run Code Online (Sandbox Code Playgroud)
显然这不起作用,但你明白了.有什么相似的吗?或者我被迫创建属性文件?
在以下情况下发生写入结束异常:两个线程:
A: PipedOutputStream put = new PipedOutputStream();
String msg = "MESSAGE";
output.wirte(msg.getBytes());
output.flush();
B: PipedInputStream get = new PipedOutputStream(A.put);
byte[] get_msg = new byte[1024];
get.read(get_msg);
Run Code Online (Sandbox Code Playgroud)
情况如下:A和B同时运行,A写入管道,B读取它.B只是从管道中读取并清除了该管道的缓冲区.然后A不会在未知的时间间隔内将msg写入管道.但是,在某一时刻,B再次读取管道并java.io.IOException: write end dead发生,因为管道的缓冲区仍然是空的.而且我不想睡眠()线程B等待A写管道,这也是不稳定的.如何避免这个问题并解决它?谢谢
要将数据发送到我的FTP服务器上的文件,我需要创建一个自定义的InputStream实现,逐行读取数据库数据,将其转换为CSV并通过其read()方法发布它:从数据库中,我得到一个List<Application>对象数据.对于每个Application对象,我想在CSV文件中创建一行.
我的想法是在构造函数中加载所有数据,然后覆盖read方法.我是否需要覆盖所有InputStream的方法?我尝试谷歌搜索一些例子,但没有成功 - 你最终能给我一个链接吗?
我在网上查看了InputStreams,似乎您只能定义一个带有预定义输入的InputStream,它将从中读取。如果我想要一个输入流,我们不确定数据是什么样子或者有多长,但它是在运行中的某个地方生成的,但完成后最终会返回零字节,该怎么办?
我所说的预定义是指大多数构造函数都会接受您已经定义的读取内容(例如:ByteArrayInputStream(byte[] array)、FileInputStream(File file))
我的用例是,我有一个返回一定量数据的方法(该方法调用服务的时间未知,我想在动态生成时流式传输这些数据)
我已经保存了流ByteArrayOutputStream.现在我想读一下FileInputStream.我怎样才能做到这一点?
这是我的outputStream.
...
OutputStream out = new ByteArrayOutputStream();
...
Run Code Online (Sandbox Code Playgroud)
现在怎么读,从FileInputStream?
java ×8
inputstream ×3
ftp ×1
gzip ×1
io ×1
ioexception ×1
java-io ×1
logging ×1
stream ×1
string ×1