首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java传输文件的最佳方法是什么?

使用Java传输文件的最佳方法是什么?
EN

Stack Overflow用户
提问于 2008-11-10 07:13:23
回答 1查看 9K关注 0票数 9

我正在编写从客户端上传文件到我的服务器的代码,其性能没有我想的那么快。

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

很抱歉有这么多代码:

代码语言:javascript
复制
InputStream fileItemInputStream ;
OutputStream saveFileStream;
int[] buffer;
while (fileItemInputStream.available() > 0) {
    buffer = Util.getBytesFromStream(fileItemInputStream);
    Util.writeIntArrToStream(saveFileStream, buffer);
}
saveFileStream.close();
fileItemInputStream.close();

Util方法如下:

代码语言:javascript
复制
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;
}

以及:

代码语言:javascript
复制
public static void writeIntArrToStream(OutputStream out, int[] arrToWrite) throws IOException {
    for (int i = 0; i < arrToWrite.length; i++) {
        out.write(arrToWrite[i]);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2008-11-10 07:18:46

一次读取一个字节将是可怕的低效。您还依赖于available,这很少是一个好主意。(如果当前没有可用的字节,则返回0,但可能会有更多的字节可用。)

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

代码语言:javascript
复制
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);
    }
}

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

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/277260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档