加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 17:47:56 所属栏目:Java 来源:网络整理
导读:我正在编写一个从客户端将文件上传到我的服务器的代码,并且性能不如我认为的那么快. 我现在正在执行文件传输的代码段,我想知道如何加速传输. 很抱歉,所有代码: InputStream fileItemInputStream ;OutputStream saveFileStream;int[] buffer;while (fileItem
我正在编写一个从客户端将文件上传到我的服务器的代码,并且性能不如我认为的那么快.

我现在正在执行文件传输的代码段,我想知道如何加速传输.

很抱歉,所有代码:

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

Util方法如下:

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]);
    }
}

解决方法

一次读取一个字节将是非常低效的.你也依赖可用,这很少是一个好主意. (如果当前没有可用的字节,则返回0,但可能有更多的可用.)

这是复制流的正确代码:

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

(呼叫者应该关闭这两个流.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读