我有一个带有小程序的网络应用程序,它将用小程序打包的文件复制到客户端计算机。
当我将其部署到网络服务器并使用:InputStream in = getClass().getResourceAsStream("filename") ;
对于我尝试过的每个文件,in.available() 总是返回 8192 字节的大小,这意味着该文件在复制到客户端计算机时已损坏。
InputStream 的类型为 HttpInputStream (sun.net.protocol.http.HttpUrlConnection$httpInputStream)。但是,当我在小程序查看器中测试小程序时,文件复制得很好,返回的输入流是 BufferedInputStream 类型,它具有文件的字节大小。我猜想当文件系统中的 getResourceStream 时将使用 BufferedInputStream,而在 http 协议(protocol)时将使用 HttpInputStream。
如何完整复制文件,HttpInputStream 有大小限制吗? 多谢。
最佳答案
in.available()
告诉您可以在不阻塞的情况下读取多少字节,而不是可以从流中读取的总字节数。
以下是将 InputStream
从 org.apache.commons.io.IOUtils
复制到 OutputStream
的示例:
public static long copyLarge(InputStream input, OutputStream output)
throws IOException {
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
long count = 0;
int n = 0;
while (-1 != (n = input.read(buffer))) {
output.write(buffer, 0, n);
count += n;
}
return count;
}
关于java - getResourceAsStream 返回 HttpInputStream,而不是整个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2870769/