1. 程式人生 > >JAVA使用位元組流與高速緩衝位元組流複製檔案對比

JAVA使用位元組流與高速緩衝位元組流複製檔案對比

好記性不如賴筆頭……

/**
* @author Ckinghan
* @描述:使用位元組流複製檔案與使用高速緩衝流複製檔案的對比示例
* WebLogin.log 檔案大小:15,028,378 位元組(14.3M)
*/

package com.Ckinghan.outputStream;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import
java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /** * @author Ckinghan * @描述:使用位元組流複製檔案與使用高速緩衝流複製檔案的對比示例 * WebLogin.log 檔案大小:15,028,378 位元組(14.3M) */ public class InputStreamCopyCompared { public static void main(String[] args) { long
startTime = System.currentTimeMillis(); //位元組流複製檔案,複製方式:一次讀取一個字元 stringFileCopy(); long endTime = System.currentTimeMillis(); System.out.println("位元組流複製檔案,複製方式:一次讀取一個字元耗時:"+(endTime-startTime)+"毫秒複製成功"); startTime = System.currentTimeMillis(); //使用高效緩衝區的位元組流讀取複製檔案,複製方式:一次複製一個字元
bufferedInputStreamReader(); endTime = System.currentTimeMillis(); System.out.println("使用高效緩衝區的位元組流讀取複製檔案,複製方式:一次複製一個字元耗時:"+(endTime-startTime)+"毫秒複製成功"); startTime = System.currentTimeMillis(); //用高效緩衝區的位元組流讀取複製檔案,複製方式:一次複製指定數量的位元組 FileCopy(); endTime = System.currentTimeMillis(); System.out.println("位元組流複製檔案,複製方式:一次複製指定數量的位元組耗時:"+(endTime-startTime)+"毫秒複製成功"); startTime = System.currentTimeMillis(); //用高效緩衝區的位元組流讀取複製檔案,複製方式:一次複製指定數量的位元組 bufferedInputStreamCopyFile(); endTime = System.currentTimeMillis(); System.out.println("用高效緩衝區的位元組流讀取複製檔案,複製方式:一次複製指定數量的位元組耗時:"+(endTime-startTime)+"毫秒複製成功"); } /** * @描述:位元組流複製檔案,複製方式:一次讀取一個字元 * @建立時間: */ public static void stringFileCopy(){ //建立位元組的輸出、輸出流 InputStream inputStream = null; OutputStream outputStream = null; try { //例項化位元組輸入、輸出流 inputStream = new FileInputStream("E:/WebLogin.log"); outputStream = new FileOutputStream("E:/new3.log"); //建立讀取的位元組ACSII碼 int len = -1; //迴圈讀取檔案資料 while ((len = inputStream.read()) != -1) { //寫入檔案 outputStream.write(len); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { //如果輸出、輸入位元組流有建立,則關閉,注意關閉順序,先關輸出流再關輸入流 try { if(outputStream != null) outputStream.close(); if(inputStream != null) inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * @描述:位元組流複製檔案,複製方式:一次複製指定數量的位元組 * @建立時間: */ public static void FileCopy(){ //建立流物件 InputStream inputStream = null; OutputStream stream = null; try { //例項化流物件 inputStream = new FileInputStream("E:/WebLogin.log"); stream = new FileOutputStream("E:/new2.log"); //接收讀取的位元組長度 int len = -1; //接收讀取的位元組 byte[] bs = new byte[1024]; //迴圈讀取位元組 while((len = inputStream.read(bs)) != -1){ //將讀取的位元組寫入到檔案中 stream.write(bs, 0, len); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { //關閉輸出流 if(stream != null) stream.close(); //關閉輸入流 if(inputStream != null) inputStream.close(); } catch (IOException e2) { e2.printStackTrace(); } } } /** * @描述:用高效緩衝區的位元組流讀取複製檔案,複製方式:一次複製指定數量的位元組 * @建立時間: */ public static void bufferedInputStreamCopyFile(){ //建立位元組流物件 InputStream inputStream = null; OutputStream outputStream = null; try { //例項化高效緩衝區位元組流的輸入、輸出物件 inputStream = new BufferedInputStream(new FileInputStream("E:/WebLogin.log")); outputStream = new BufferedOutputStream(new FileOutputStream("E:/new.log")); //每次讀取的檔案位元組數量 int len = -1; //每次讀取的檔案位元組資料 byte[] bs = new byte[1024]; //迴圈讀取檔案,直至讀到檔案末尾 while ((len = inputStream.read(bs)) != -1) { //寫入到檔案 outputStream.write(bs, 0, len); } //清空緩衝區,將寫入到檔案中的資料儲存 outputStream.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { //關閉流 if(outputStream != null) outputStream.close(); if(inputStream != null) inputStream.close(); } catch (IOException e2) { e2.printStackTrace(); } } } /** * @描述:使用高效緩衝區的位元組流讀取複製檔案,複製方式:一次複製一個字元 * @建立時間: */ public static void bufferedInputStreamReader(){ //建立位元組流物件 InputStream inputStream = null; OutputStream outputStream = null; try { //例項化高效緩衝區位元組流的輸入、輸出物件 inputStream = new BufferedInputStream(new FileInputStream("E:/WebLogin.log")); outputStream = new BufferedOutputStream(new FileOutputStream("E:/login.log")); //讀取的位元組ACSII碼 int val = -1; //迴圈讀取檔案,直至讀到檔案末尾 while((val = inputStream.read()) != -1){ //寫入到檔案 outputStream.write(val); } //清空緩衝區,將寫入到檔案中的資料儲存 outputStream.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { //關閉流 if(outputStream != null) outputStream.close(); if(inputStream != null) inputStream.close(); } catch (IOException e2) { e2.printStackTrace(); } } } } 執行結果: 位元組流複製檔案,複製方式:一次讀取一個字元耗時:38814毫秒複製成功 使用高效緩衝區的位元組流讀取複製檔案,複製方式:一次複製一個字元耗時:146毫秒複製成功 位元組流複製檔案,複製方式:一次複製指定數量的位元組耗時:72毫秒複製成功 用高效緩衝區的位元組流讀取複製檔案,複製方式:一次複製指定數量的位元組耗時:37毫秒複製成功

可以看出,使用了高速緩衝流複製檔案,所用時間比之未使用之前的相對較少,而且檔案越大,差距越大。

相關推薦

JAVA使用位元組高速緩衝位元組複製檔案對比

好記性不如賴筆頭…… /** * @author Ckinghan * @描述:使用位元組流複製檔案與使用高速緩衝流複製檔案的對比示例 * WebLogin.log 檔案大小:15,028,378 位元組(14.3M) */ packag

Java——Properties集合,Object序列化反序列化,打印,commons-IO文件工具類

都是 oos times odi store buffer src object 所有 一、properties集合 集合對象Properties類,繼承Hashtable,實現Map接口,可以和IO對象結合使用,實現數據的持久存儲。 p { margin-bottom:

java ->IO_序列化反序列化

set final found class文件 ati 技術分享 保存到文件 back 序列化對象 序列化流與反序列化流 用於從流中讀取對象的操作流 ObjectInputStream 稱為 反序列化流 用於向流中寫入對象的操作流 ObjectOutputStream

java之IO(序列化反序列化

一.物件序列化流ObjectOutputStream   用於向流中寫入物件的操作流 ObjectOutputStream   稱為 序列化流 ObjectOutputStream 將 Java 物件的基本資料型別和圖形寫入 OutputStream。可以使用 Object

IO之字元字元緩衝

在I/O類庫中,java.io.InputStream和java.io.OutputStream分別表示位元組輸入流和位元組輸出流,它們都是抽象類,不能例項化,資料流中的最小單位是位元組,所以叫做位元組流。  一、InputStream中的讀取資料的方法如下:  1 、int

標準文檔脫離文檔

設置 ted left 位置 add html表格 單元 區域 部分 在網頁當中,所有的元素都有自己的占位。 標準文檔流指在沒有CSS幹預的前提下,塊級元素獨占一行,可以自行定義寬、高;而行內元素並排顯示,寬、高為auto。 常見的塊級元素有: <address>

IO--序列化反序列化

ng- 對象 style 完成 alt 完整 寫入 配置 let IO流--序列化流與反序列化流: 序列化流:把對象當做流一樣寫入到文本文件中 ObjectOutputSream(); 反序列化流:把文本文件中的流對象還原成對象ObjectInputSream

序列化反序列化

序列化是把物件特性儲存到物理介質上,反序列化是把儲存在物理介質上的物件取出還原成物件。 能被序列化的物件所屬的類必須實現Serializable介面。 1、物件序列化流ObjectOutputStream 構造方法: ObjectOutputStream(OutputStream out):建立寫入指

序列化反序列化,列印,工具類commons-IO

1序列化流與反序列化流 用於從流中讀取物件的操作流 ObjectInputStream    稱為 反序列化流 用於向流中寫入物件的操作流 ObjectOutputStream   稱為 序列化流 特點:用於操作物件。可以將物件寫入到檔案中,也可以從檔案

Properties類、序列化反序列化

Properties類 Properties類介紹 特點: 1、Hashtable的子類,map集合中的方法都可以用。 2、該集合沒有泛型。鍵值都是字串。 3、它是一個可以持久化的屬性集。鍵值可以儲存到集合中,也可以儲存到持久化的裝置(硬碟、U盤、光碟)上。鍵值的來源也可以是持久化的裝置。 4、有和流

字元Writer、緩衝字元BufferedWriter、FileWriter常用方法

一、字元流:                       讀寫時都是以字元為單位進行的。              1:字元流的父類:                                輸出流:Writer                            

java IO字元位元組簡單使用示例

1.Reader && Writer Reader java.lang.Object |-- java.io.Reader//常用方法 |-- int read() //讀取單個字元 |--

JAVA 的輸入輸出當中,什麼時候該使用字元?什麼時候該使用位元組

1. InputStream 和OutputStream,兩個是為位元組流設計的,主要用來處理位元組或二進位制物件, 2. Reader和 Writer.兩個是為字元流(一個字元佔兩個位元組)設計的,主要用來處理字元或字串. 字元流處理的單元為2個位元組的Unicode字元,分別操作字元、字元陣列或字串,而位

java 位元組字元的區別 什麼是緩衝區

位元組流與和字元流的使用非常相似,兩者除了操作程式碼上的不同之外,是否還有其他的不同呢?實際上位元組流在操作時本身不會用到緩衝區(記憶體),是檔案本身直接操作的,而字元流在操作時使用了緩衝區,通過緩衝區再操作檔案,如圖所示。   下面以兩個寫檔案的操作為主進行比較,但是在操作時位元組流和字元流的

java:字元緩衝,裝飾設計模式,介面卡設計模式,位元組

字元緩衝流之緩衝寫出流BufferedWriter package com.qianfeng.test; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; /*

JAVA高階基礎(31)---位元組緩衝

 位元組緩衝流 BufferredInputStream bos.flush();//將緩衝區強制重新整理 bos.close();//在關閉輸出流的時候,首先會執行 flush 將緩衝區的資料重新整理清空,然後再關閉流。 注意在使用緩衝輸出流的時候,必須進行強制

java第20天----字元緩衝位元組,標準輸入,裝飾設計模式,介面卡設計模式

昨天知識總結 1.流的基礎 2.流的分類 3.字元流 讀 FileReader 寫 FileWriter 4.File 流 字元緩衝流 字元緩衝流:又叫字元緩衝區,為了提高讀寫的能力,本身沒有讀寫的能力,要想進行讀寫,必須依靠字元流來實現。

Java之路:位元組字元

儘管可以使用File進行檔案的操作,但是如果要進行檔案內容的操作,在Java之中就必須通過兩類流操作完成。 Java的流操作分為位元組流和字元流兩種。 字元流處理的物件單元是Unicode字元,每個Unicode字元佔據2個位元組,而位元組流輸入輸出的資料是以單個位元組(Byte

Java——I/O(位元組、字元轉換

位元組流和字元流 位元組流(byte):InputStream、OutputStream  字元流(char):Reader、Writer 位元組流與字元流的區別: 位元組流是原生的操作,而字元流是經過處理後的操作。 一般使用位元組流——無論是網路傳

Java 高階程式設計-IO位元組字元

1. 簡介 2. 位元組輸出流OutputStream 3. 位元組輸入流InputStream 4. 字元輸出流Writer 5. 字元輸入流Reader 6. 位元組流與字元流的區別 7. 轉