代码之家  ›  专栏  ›  技术社区  ›  jjnguy Julien Chastang

用Java传递文件的最好方法是什么?

  •  9
  • jjnguy Julien Chastang  · 技术社区  · 16 年前

    我正在编写将文件从客户机上载到服务器的代码,但性能没有我认为的那么快。

    我有当前正在进行文件传输的代码片段,我想知道如何加快传输速度。

    抱歉,所有代码:

    InputStream fileItemInputStream ;
    OutputStream saveFileStream;
    int[] buffer;
    while (fileItemInputStream.available() > 0) {
        buffer = Util.getBytesFromStream(fileItemInputStream);
        Util.writeIntArrToStream(saveFileStream, buffer);
    }
    saveFileStream.close();
    fileItemInputStream.close();
    

    使用方法如下:

    public static int[] getBytesFromStream(InputStream in, int size) throws IOException {
        int[] b = new int[size];
        int count = 0;
        while (count < size) {
            b[count++] = in.read();
        }
        return b;
    }
    

    还有:

    public static void writeIntArrToStream(OutputStream out, int[] arrToWrite) throws IOException {
        for (int i = 0; i < arrToWrite.length; i++) {
            out.write(arrToWrite[i]);
        }
    }
    
    1 回复  |  直到 14 年前
        1
  •  16
  •   Jon Skeet    16 年前

    一次读取一个字节的效率会非常低。你也依赖于 available 这不是什么好主意。(如果没有字节,则返回0 目前 有,但可能还有更多。)

    这是复制流的正确代码类型:

    public void copyStream(InputStream input, OutputStream output) throws IOException
    {
        byte[] buffer = new byte[32*1024];
        int bytesRead;
        while ((bytesRead = input.read(buffer, 0, buffer.length)) > 0)
        {
            output.write(buffer, 0, bytesRead);
        }
    }
    

    (调用方应关闭两个流。)