第14章作業
技術標籤:java
第一題:Java中流的分類有哪些
按照讀取型別分類
- 位元組流:位元組流以位元組(byte)作為處理單位,一次僅讀入或輸出一個位元組;在Java中,位元組流是由InputStream與OutputStream兩個抽象類所衍生的一系列子類所組成的;
- 字元流:與位元組流不同,字元流以字元作為處理單位;在Java中,字元流是由Reader與Writer兩個抽象類所衍生的一系列子類所組成的。
按照流動方向分類
- 輸入流:即用來讀取資料的流,可以將資料從外部裝置讀入記憶體中;
- 輸出流:即將資料輸出到指定的地方去,可以輸出到終端、檔案,也可以通過網路通訊傳送給對方。
按照流的源頭分類
- 節點流:即從特定的資料來源頭讀取資料,這些資料來源可以是檔案、終端、網路裝置等;
- 過濾流:過濾流不從特定的資料來源讀取資料,而是通過連線節點流來對資料進行更加複雜強大的操作,比如BufferedInputStream和BufferedOutputStream兩個過濾流就提供了快取的功能,使得讀取更加地高效;
第二題:位元組流InputStream和OutputStream的子類分別有哪些?請舉例說明其使用場景。與其對應的字元流分別有哪些?
1.InputStream的子類
-
FileInputStream 檔案流
-
PipedInputStream 管道輸入流,讀取管道內容。多和PipedOutputStream一起用於多執行緒通訊
-
ObjectInputStream用來恢復被序列化的物件
-
ByteArrayInputStream包含一個記憶體緩衝區,位元組從中取出。
-
SequenceInputStream 是多種輸入流的邏輯串聯,從第一個輸入流讀取,直到最後一個輸入流
-
FilterInputStream 過濾流,在讀寫資料的同時還可以對資料進行特殊處理
2.OutputStream的子類
-
FileOutputStream 檔案流
-
PipedOutputStream 管道流
-
ObjectOutputStream將物件序列化後寫入指定地方
-
ByteArrayOutputStream在位元組陣列和流之間搭建橋樑
-
SequenceOutputStream 是多種輸入流的邏輯串聯
-
FilterInputStream 過濾流,在讀寫資料的同時還可以對資料進行特殊處理
第三題:位元組流與字元流的轉化是怎樣的?Java對此提供了哪些支援?
輸入位元組流轉為字元流需要用到inputstreamReader的構造方法:
InputStreamReader(InputStream in)
如:
InputStreamReader ins = new InputStreamReader(System.in);
InputStreamReader ins = new InputStreamReader(new
FileInputStream(“test.txt”));
輸出字元流轉為位元組流用到OutputStreamWriter或PrintWriter的構造方法:
OutputStreamWriter(OutputStream out)
PrintWriter(OutputStream out)
如:
OutputStreamWriter outs = new OutputStreamWriter(new
FileOutputStream(“test.txt”));
第四題:Java中的過濾流(流的裝配)有什麼作用?請舉例說明常用的過濾流。
過濾流的作用:
普通的流讀取或寫入時沒有緩衝功能,只能讀取或寫入位元組或字元,而過濾流的作用就是為普通的流新增一些複雜的功能,如緩衝功能、操作(讀取)各種資料型別等功能。
過濾流BufferedReader的使用:用於快取字元流,可以一行一行的讀
import java.io.*;
public class inDataSortMaxMinIn {
public static void main(String args[]) {
try{
BufferedReader keyin = new BufferedReader(new
InputStreamReader(System.in));
String c1;
int i=0;
int[] e = new int[10];
while(i<10){
try{
c1 = keyin.readLine();
e[i] = Integer.parseInt(c1);
i++;
}
catch(NumberFormatException ee){
System.out.println("請輸入正確的數字!");
}
}
}
catch(Exception e){
System.out.println("系統有錯誤");
}}}
過濾流 DataInputStream和DataOutputStream的使用, 可從位元組流中寫入、讀取Java基本資料型別,不依賴於機器的具體資料型別,方便儲存和恢復資料
import java.io.*;
public class DataStream {
public static void main(String[] args)throws Exception{
try {
DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new
FileOutputStream("test.txt")));
dos.writeInt(3);//寫入整型
dos.writeDouble(3.14);//寫入浮點型
dos.writeUTF(“hello”);//寫入字串
dos.close();
DataInputStream dis = new DataInputStream(new BufferedInputStream(new
FileInputStream("test.txt")));
System.out.println(dis.readInt()); //讀取整型,輸出3
System.out.println(dis.readDouble()); //讀取浮點型,輸出3.14
System.out.println(dis.readUTF()); //讀取字串,輸出hello
dis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
第五題:什麼是物件的序列化和反序列化?Java對此提供了哪些支援?
- 物件的序列化:又叫序列化(Serialization),序列化指的是將物件轉化為位元組序列,當將物件轉為位元組後便可以將物件儲存在檔案中或在網路上進行傳輸;
- 物件的反序列化:將某個物件的位元組序列恢復成原來物件的過程稱為反序列化;
Java的io包中提供了兩個類來對物件進行序列化與反序列化,這兩個類是ObjectOutputStream(序列化)與ObjectInputStream(反序列化)。
第六題:Java的File類表示什麼?有什麼作用?
Java的File類是對檔案和路徑名的抽象表示,可以通過File類來對檔案和路徑進行許多操作,這些操作包括刪除、建立、重新命名檔案和目錄等,還可以判斷檔案或目錄是否存在,獲取檔案大小等資訊。
第七題:Java對檔案的讀寫分別提供了哪些支援?
Java對檔案的讀操作提供了FileInputStream與FileReader兩個類進行支援,
對檔案的寫操作提供了FileOutputStream與FileWriter兩個類進行支援。