当我需要使用它2次时,如何重新打开已关闭的InputStream

Waz*_*_Be 16 java android inputstream

我目前正在使用InpuStream从我的服务器获取JSON响应.

我需要做两件事:

  1. 解析它并在屏幕上显示值
  2. 将此Feed保存在SDCard文件中

在逐个使用这两种方法时,这完全没有问题.

使用GSON进行解析:

Gson gson = new Gson();
Reader reader = new InputStreamReader (myInputStream);
Result result = gson.FrmJson(reader, Result.class)
Run Code Online (Sandbox Code Playgroud)

并将复制到SDCard

FileOutputStream f (...) f.write (buffer)
Run Code Online (Sandbox Code Playgroud)

它们都经过了测试.

问题是一旦解析完成,我想写入SDCard并且它会中断.我知道我的InputStream已关闭,这就是问题所在.

这里有一些接近我的问题:如何缓存InputStream以供多次使用

有没有办法改进该解决方案并提供我们可以使用的东西?

aio*_*obe 29

我可能会将输入流排入byte[]使用中ByteArrayOutputStream,然后ByteArrayInputStream在每次需要重新读取流时根据结果创建一个新的.

像这样的东西:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int n = 0;
while ((n = myInputStream.read(buf)) >= 0)
    baos.write(buf, 0, n);
byte[] content = baos.toByteArray();

InputStream is1 = new ByteArrayInputStream(content);
... use is1 ...

InputStream is2 = new ByteArrayInputStream(content);
... use is2 ...
Run Code Online (Sandbox Code Playgroud)

相关且可能有用的问题和答案: