我正在编写一个从客户端将文件上传到我的服务器的代码,并且性能不如我认为的那么快.
很抱歉,所有代码:
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); } }
(呼叫者应该关闭这两个流.)