使用檔案流對檔案進行復制:
package io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
-
使用檔案流完成檔案的復制操作
/
public class CopyDemo {
public static void main(String[] args) throws IOException {
// FileInputStream fis = new FileInputStream("image.jpg");
// FileOutputStream fos = new FileOutputStream("image_cp.jpg");
FileInputStream fis = new FileInputStream("01.rmvb");
FileOutputStream fos = new FileOutputStream("01_cp.rmvb");
/
image.jpg檔案內容
11001100 00110011 11110000 00001111 10101010 01010101 ...第1次呼叫:d = fis.read(); 11001100 00110011 11110000 00001111 10101010 01010101 ... ^^^^^^^^ 讀取的位元組 d的2進制:00000000 00000000 00000000 11001100 fos.write(d); d:00000000 00000000 00000000 11001100 ^^^^^^^^ 寫出的位元組 image_cp.jpg檔案資料: 11001100 */ int d;//記錄每次讀取的位元組內容 long start = System.currentTimeMillis();//獲取當前系統時間的毫秒值 while( (d = fis.read()) != -1 ) {//若讀取到了-1則應當停止回圈,沒有讀取到-1則應當抄 fos.write(d); } long end = System.currentTimeMillis();//獲取當前系統時間的毫秒值 System.out.println("復制完畢,耗時:"+(end-start)+"ms"); fos.close(); fis.close();}
}
使用塊讀寫一組位元組,使用byte陣列提高讀寫的效率:
package io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
-
提高每次讀寫的資料量減少實際讀寫的次數可以提高讀寫效率
-
塊讀寫:一次讀寫一組位元組
/
public class CopyDemo2 {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("01.rmvb");
FileOutputStream fos = new FileOutputStream("01_cp.rmvb");
/
java.io.InputStream超類上定義了塊讀位元組的操作:
int read(byte[] data)
一次性讀取給定位元組陣列data總長度的位元組量并將讀取到的所有位元組存入到該陣列中,
回傳值表達本次實際讀取的位元組數量,如果回傳值為整數-1則表示讀取到了流的末尾,檔案內容(6位元組): 11001100 00110011 11110000 00001111 10101010 01010101 byte[] data = new byte[4];//4位元組長的陣列 int len = 0;//記錄每次實際讀取的位元組數 第一次呼叫len = fis.read(data); 一次性嘗試從檔案中讀取data陣列長度的位元組量(本案例:4個位元組) 11001100 00110011 11110000 00001111 10101010 01010101 ^^^^^^^^ ^^^^^^^^ ^^^^^^^^ ^^^^^^^^ data:{11001100 00110011 11110000 00001111} 陣列中存放的是本次讀取的4位元組內容 len:4 這里的4是表達本次實際讀取到了4個位元組 第二次呼叫len = fis.read(data); 一次性嘗試從檔案中讀取data陣列長度的位元組量(本案例:4個位元組) 11001100 00110011 11110000 00001111 10101010 01010101 檔案末尾 ^^^^^^^^ ^^^^^^^^ ^^^^^^^^ ^^^^^^^^ 本次實際僅讀取到了2個位元組 data:{10101010 01010101 11110000 00001111} |--本次讀取的位元組--||---上次的舊資料---| len:2 本次實際僅讀取到了2個位元組 第三次呼叫len = fis.read(data); 11001100 00110011 11110000 00001111 10101010 01010101 檔案末尾 ^^^^^^^^ ^^^^^^^^ ^^^^^^^^ ^^^^^^^^ data:{10101010 01010101 11110000 00001111} |--------沒有變化,都是舊資料--------| len:-1 表達檔案末尾 java.io.OutputStream超類上定義了塊寫操作 void write(byte[] data) 一次性將給定的位元組陣列中所有的位元組寫出 byte[] data:{10101010 01010101 11110000 00001111} fos.write(data) 檔案資料: 10101010 01010101 11110000 00001111 void write(byte[] data,int offset,int len) 一次性將給定的位元組陣列從下標offset處開始的連續len個位元組寫出 byte[] data:{10101010 01010101 11110000 00001111} ^^^^^^^^ ^^^^^^^^ fos.write(data,1,2):將data陣列中從下標1開始的連續2個位元組一次性寫出 檔案資料: 01010101 11110000 */ //編譯后:byte[] data = new byte[10240]; byte[] data = new byte[1024*10];//10kb int len = 0;//記錄每次實際讀取的位元組數 long start = System.currentTimeMillis(); while( (len = fis.read(data)) != -1 ){ fos.write(data,0,len); } long end = System.currentTimeMillis(); System.out.println("復制完畢,耗時"+(end-start)+"ms"); fis.close(); fos.close();}
}
回傳當前時間:
package io;
public class CurrentTimeDemo {
public static void main(String[] args) {
//回傳的UTC時間,1970年1月1日 00:00:00到當前系統時間之間經過的毫秒
long ms = System.currentTimeMillis();
System.out.println(ms);
long max = Long.MAX_VALUE;
System.out.println("公元:"+(max/1000/60/60/24/365+1970));
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/502217.html
標籤:其他
