我目前正在使用InpuStream从我的服务器获取JSON响应。
我需要做两件事:
在逐个使用这两种方法时,这完全没有问题。
使用GSON进行解析:
Gson gson = new Gson();
Reader reader = new InputStreamReader (myInputStream);
Result result = gson.FrmJson(reader, Result.class)
并使用
复制到SDCardFileOutputStream f (...) f.write (buffer)
两者都经过测试。
TYhe问题是解析完成后,我想写入SDCard并且它会中断。 我知道我的InputStream已关闭,这就是问题所在。
我的问题附近有一些问题:How to Cache InputStream for Multiple Use
有没有办法改进该解决方案并提供我们可以使用的东西?
答案 0 :(得分:28)
我可能会使用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 ...
相关且可能有用的问题和答案:
答案 1 :(得分:0)
或者,我找到了实现它的好方法:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class CopyInputStream
{
private InputStream _is;
private ByteArrayOutputStream _copy = new ByteArrayOutputStream();
/**
*
*/
public CopyInputStream(InputStream is)
{
_is = is;
try
{
copy();
}
catch(IOException ex)
{
// do nothing
}
}
private int copy() throws IOException
{
int read = 0;
int chunk = 0;
byte[] data = new byte[256];
while(-1 != (chunk = _is.read(data)))
{
read += data.length;
_copy.write(data, 0, chunk);
}
return read;
}
public InputStream getCopy()
{
return (InputStream)new ByteArrayInputStream(_copy.toByteArray());
}
}
我用
来称呼它CopyInputStream cis = new CopyInputStream(input);
InputStream input1 = cis.getCopy();