本文共 2290 字,大约阅读时间需要 7 分钟。
传统古老的上传下载方式大概主要是用BufferedStream来提高上传下载的速度,因为使用它要比其他的Stream方式要快一些。
/** * download file use buffered stream, this is an old version * @param filePath * @throws IOException */ public static void downLoadBySimple(String filePath,String savePath){ BufferedReader inputStream=null; BufferedWriter outputStream=null; try{ inputStream=new BufferedReader(new FileReader(filePath)); outputStream=new BufferedWriter(new FileWriter(savePath)); int c=0; while((c=inputStream.read())!=-1){ outputStream.write(c); } }catch(Exception e){ System.out.println(e.getMessage()); }finally{ if(inputStream!=null){ try { inputStream.close(); } catch (IOException e) { System.out.println(e.getMessage()); } } if(outputStream!=null){ try{ outputStream.close(); }catch(IOException e){ System.out.println(e.getMessage()); } } } }
下面是使用NIO的一种方式,注释代码行与它的上一行作用是一样的,选择一种就可以了。
这种方式看上去更整洁一些,不过这里有限制条件是上传或者下载的源文件必须提供大小。
/** * * @param filePath * @param savePath */ public static void downLoadByFileChannel(String filePath,String savePath){ FileInputStream fis=null; FileOutputStream fos=null; FileChannel inChannel=null; FileChannel outChannel=null; try{ fis=new FileInputStream(filePath); fos=new FileOutputStream(savePath); inChannel=fis.getChannel(); outChannel=fos.getChannel(); outChannel.transferFrom(inChannel, 0, (new File(filePath)).length()); //inChannel.transferTo(0, (new File(filePath)).length(), outChannel); }catch(IOException e){ System.out.println(e.getMessage()); }finally{ try { inChannel.close(); } catch (IOException e) { System.out.println(e.getMessage()); } try { outChannel.close(); } catch (IOException e) { System.out.println(e.getMessage()); } try { fis.close(); } catch (IOException e) { System.out.println(e.getMessage()); } try { fos.close(); } catch (IOException e) { System.out.println(e.getMessage()); } } }使用web的方式上传下载文件的时候,可以根据是否独占线程,是否阻塞等限制来选择使用NIO/IO. 当使用单独的文本服务器提供文本服务的时候,一般选用NIO的方式,如果只是简单的文件上传下载,选择自己觉得最简单的就可以了。
转载地址:http://sepdi.baihongyu.com/