注意我們使用緩沖提高I/O操作的速度。
有比串行化更快的輸出大量數(shù)據(jù)然后讀回的方法嗎?可能沒有,除非在特殊的情況下。例如,假設(shè)你決定將文本輸出為64位的整數(shù)而不是一組8字節(jié)。作為文本的長整數(shù)的最大長度是大約20個(gè)字符,或者說二進(jìn)制表示的2.5倍長。這種格式看起來不會(huì)快。然而,在某些情況下,例如位圖,一個(gè)特殊的格式可能是一個(gè)改進(jìn)。然而使用你自己的方案而不是串行化的標(biāo)準(zhǔn)方案將使你卷入一些權(quán)衡。
除了串行化實(shí)際的I/O和格式化開銷外(使用DataInputStream和 DataOutputStream), 還有其他的開銷,例如在串行化恢復(fù)時(shí)的創(chuàng)建新對(duì)象的需要。
注意DataOutputStream 方法也可以用于開發(fā)半自定義數(shù)據(jù)格式,例如:
import java.io.*;
import java.util.*;
public class binary1 {
public static void main(String args[]) {
try {
FileOutputStream fos = new FileOutputStream("outdata");
BufferedOutputStream bos = new BufferedOutputStream(fos);
DataOutputStream dos = new DataOutputStream(bos);
Random rn = new Random();
final int N = 10;
dos.writeInt(N);
for (int i = 1; i <= N; i++) {
int r = rn.nextInt();
System.out.println(r);
dos.writeInt(r);
}
dos.close();
} catch (IOException e) {
System.err.println(e);
}
}
}
和:
import java.io.*;
public class binary2 {
public static void main(String args[]) {
try {
FileInputStream fis = new FileInputStream("outdata");
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
int N = dis.readInt();
for (int i = 1; i <= N; i++) {
int r = dis.readInt();
System.out.println(r);
}
dis.close();
} catch (IOException e) {
System.err.println(e);
}
}
}
這些程序?qū)?0個(gè)整數(shù)寫入文件然后讀回它們。
相關(guān)推薦:計(jì)算機(jī)等級(jí)考試二級(jí)Java經(jīng)典算法大全匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |