(一)Java IO

java I/O

本文主要通過代碼進行知識的複習及代入哈


java IO 中操作文件包括
字節流和字符流

其中字節流使用 inputstream和outputstream及其子類實現操作

字符流則使用文本類型進行操作writer和reader等類


文件的讀寫操作 一般使用fileinputstream 獲取文件地址
使用bufferedinputstream深層快速進行文件的讀取操作

字節流

在這裏插入圖片描述

字節輸入流

inputstream 抽象類 本身不能進行操作 子類包括 FileInputStream [常用操作類]
FileterInputStream[ 子類包括 BuferedInputStream 緩存輸入流 和 DataInputStream 數據流] 和ObjectInputStream

package com.zut.io;
//實現讀取文本中的數字
import java.io.File;
import java.io.FileInputStream;


public class FileDemo {
	public static void main(String[] args) throws Exception {
		File file = new File("E:\\file.txt");
		
		FileInputStream fileInputStream = new FileInputStream(file);
		int b = 0;
		byte[] bs = new byte[512];
		int i = 0;
		while((b = fileInputStream.read()) != -1) {
			bs[i] = (byte)b;
			i++;
		}
		System.out.println(new String(bs));
		fileInputStream.close();
	}
}

FileOutputStream

字節輸出流 子類包括 FileOutputStream[常用操作類]
FileterOutputStream ObjectOutputStream

練習:使用高效的字符緩衝流複製文檔

package ch1;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/*
 * 練習:使用高效的字符緩衝流複製文檔
 * 複製jdk文檔到工程的根目錄
 * 字節流 看不懂 
 * 字符流 能看懂
 * 
 */
public class Node01 {
	public static void main(String[] args) throws IOException {
		long start = System.currentTimeMillis();
		method("e:\\JDK6API中文參考.chm","jdk.chm");
		long end = System.currentTimeMillis();
		long time = end-start;
		System.out.println(time);
	}

	private static void method(String strstring, String datastring) throws IOException  {
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(strstring));
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(datastring));
		byte [] bys = new byte[1024];
		int len = 0;
		while((len=bis.read(bys)) != -1) {
			bos.write(bys,0,len);
		}
	}
}

字符流

在這裏插入圖片描述

Reader

文本輸入流 包括 inputStreamInput [轉換流將字節輸入流轉換爲字符輸入流] 子類爲FileReader 和 **BufferedReader [ 緩存輸入流] **


文本輸出流 包括 OutputStreamInput [ 轉換流將字節輸出流轉換爲字符輸出流 ] 子類爲FileWriterBufferedWeiter
[ 緩存輸入流]


package com.zut.io;
//實現從鍵盤輸入並輸出到控制檯
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class bufferedInputStreamDemo {
public static void main(String[] args) {
	BufferedReader stream = new BufferedReader(new InputStreamReader(System.in));
	//BufferedReader 讀取內容爲字符,同時System類爲完全輸入流,
	//內容爲InputStream 字節流
	//因此使用InputStreamReader進行字節流轉換爲字符流
try {
	System.out.println(stream.readLine());
} catch (IOException e) {

	e.printStackTrace();
}
}
}


package ch1;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Node04 {
public static void main(String[] args) throws IOException {
	long st = System.currentTimeMillis();
	tp("E:\\a.txt","ts.txt");
	long en = System.currentTimeMillis();
	System.out.println("緩衝流複製用的時間爲"+ " "+ (en - st));
}
private static void tp(String string, String datastring) throws IOException {
	BufferedReader fss = new BufferedReader(new FileReader(string));
	BufferedWriter fsg = new BufferedWriter(new FileWriter(datastring));
/*	char [] chs = new char[1024];
	int len = 0;
	while((len = fss.read(chs))!=-1) {
		fsg.write(chs, 0, len);
		fsg.flush();
	}
	fss.close();
	fsg.close();
	一次複製指定距離
	*/



	//一次複製一行
	
	String str = null;
	while((str = fss.readLine()) != null) {
		fsg.write(str);
		fsg.newLine();
		fsg.flush();
	}
	fss.close();
	fsg.close();
}
}


重點

字符流和字節流的區別?

傳輸的單位不同
字符流:用於處理文字和字符的流。操作完成後不關閉流,數據無法傳遞。

字節流:文字以外的都可以用。操作完成後不需關閉流,也可以傳遞數據。
是否佔用緩存
字符流: 字符流操作時使用了緩衝區

字節流:字節流是直接操作文件本身的。
什麼是轉換流?
轉換流 是將字節流 轉化爲 字符流的中間操作流 實現字節和字符流的互通

serialVersionUID的作用是什麼?
序列版本號,凡是實現Serializable接口的類都有一個表示序列化版本標識符的靜態變量。實現Serializable接口的類如果類中沒有添加serialVersionUID,那麼就會出現警告提示


對象序列化與反序列化

把對象轉換爲字節序列的過程稱爲對象的序列化;把字節序列恢復爲對象的過程稱爲對象的反序列化。

注意 序列化和反序列化只針對於 字節流
只有實現了Serializable和Externalizable接口的類的對象才能被序列化。

Externalizable接口繼承自 Serializable接口
實現Externalizable接口的類完全由自身來控制序列化的行爲。
而僅實現Serializable接口的類可以採用默認的序列化方式

對象反序列化的步驟:
1) 創建一個對象輸入流,它可以包裝一個其他類型的源輸入流,如文件輸入流;
2) 通過對象輸入流的readObject()方法讀取對象




															本文完
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章