1. java字元流讀寫數據
就是序列化和反序列化,就是將對象轉化字元序列,將字元序列轉為對象的過程
package com.tx.test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
public class test{
public static void main(String[] args) throws FileNotFoundException, IOException {
List<Student> list = new ArrayList<Student>();
list.add(new Student("as","男",14));
list.add(new Student("ass","男",18));
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("data/out.txt"));
//輸出流保存的文件名為 my.out ;ObjectOutputStream能把Object輸出成Byte流
oos.writeObject(list);
oos.close();//序列化完畢
System.out.println("序列化完畢");
//反序列化
ObjectInputStream oin = null;
oin = new ObjectInputStream(new FileInputStream("data/out.txt"));
List<Student> stulist = null;
try {
stulist = (List<Student>) oin.readObject();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
for(Student s : stulist) {
System.out.println(s.toString());
}
System.out.println("反序列化完成");
}
}
2. java io字元流和位元組流的區別
一句話概括:位元組流是由位元組組成的回,字元流是由字元組成的.Java里字元由兩個位元組組成.
擴展:答位元組流是最基本的,所有的InputStream和OutputStream的子類都是,主要用在處理二進制數據,它是按位元組來處理的
但實際中很多的數據是文本,又提出了字元流的概念,它是按虛擬機的encode來處理,也就是要進行字元集的轉化
實際上位元組流在操作時本身不會用到緩沖區(內存),是文件本身直接操作的,而字元流在操作時使用了緩沖區,通過緩沖區再操作文件。
3. java中有幾種類型的流
Java中的流分為兩種,一種是位元組流,另一種是字元流,分別由四個抽象類來表示(每種流包括輸入和輸出兩種所以一共四個):InputStream,OutputStream,Reader,Writer。Java中其他多種多樣變化的流均是由它們派生出來的.
字元流和位元組流是根據處理數據的不同來區分的。位元組流按照8位傳輸,位元組流是最基本的,所有文件的儲存是都是位元組(byte)的儲存,在磁碟上保留的並不是文件的字元而是先把字元編碼成位元組,再儲存這些位元組到磁碟。
1.位元組流可用於任何類型的對象,包括二進制對象,而字元流只能處理字元或者字元串;
2. 位元組流提供了處理任何類型的IO操作的功能,但它不能直接處理Unicode字元,而字元流就可以。
讀文本的時候用字元流,例如txt文件。讀非文本文件的時候用位元組流,例如mp3。理論上任何文件都能夠用位元組流讀取,但當讀取的是文本數據時,為了能還原成文本你必須再經過一個轉換的工序,相對來說字元流就省了這個麻煩,可以有方法直接讀取。
字元流處理的單元為2個位元組的Unicode字元,分別操作字元、字元數組或字元串,而位元組流處理單元為1個位元組, 操作位元組和位元組數組。所以字元流是由Java虛擬機將位元組轉化為2個位元組的Unicode字元為單位的字元而成的,所以它對多國語言支持性比較好!