起因
在读取文件流的时候,想再一次获取InputStream,但实际却获取了null,导致了写入了一个空文件。
解决
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| InputStream input= requset.getInputStream();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = input.read(buffer)) > -1 ) { byteArrayOutputStream.write(buffer, 0, len); } byteArrayOutputStream.flush();
InputStream inputStreamA = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); InputStream inputStreamB = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
BufferedReader br = new BufferedReader(new InputStreamReader(inputStreamB,"UTF-8")); String line = null; StringBuilder sb = new StringBuilder(); while ((line = br.readLine()) != null) { sb.append(line); }
|
原因
读取文件流时,就是将InpuStream从开始读成二进制,但是这个流是不可逆的,也就是读一次就读到了文件流的末尾。所以在下一次需要读文件流时,其实只从文件流的末尾开始读,当然也就是个空,什么也没有读出来。
先将InputStream读到一个StringBuffer是比较好的选择。