java - getResourceAsStream 返回 HttpInputStream,而不是整个文件

标签 java inputstream

我有一个带有小程序的网络应用程序,它将用小程序打包的文件复制到客户端计算机。

当我将其部署到网络服务器并使用: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() 告诉您可以在不阻塞的情况下读取多少字节,而不是可以从流中读取的总字节数。

以下是将 InputStreamorg.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/

相关文章:

java - 如何使用 "?"no get Path Rest?

java - 一个字段上的 Java 注解数量是否有限制?

java - 如何编写通用的远程 ejb 查找?

Java InputStream读取多部分消息

java - 在 JAX-RS 中返回带有 InputStream 参数的自定义对象

Java - 读取图像(IIOException : Can't Create an ImageInputStream)

java - 从 JavaFX 中的不同线程更新 UI

java - 如何将指定数量的 JPanel 添加到 JFrame 中?

java - 为什么 Android 套接字周期性读取如此缓慢?

c++ - 如何清除String流中的内容?