常見流

一:緩衝流
1:定義:在內存與硬盤之間創建一個大小合適的緩衝區,當內存和硬盤進行數據訪問時,能提高訪問硬盤的次數,提高效率。
2:分類:緩衝分爲字節緩衝流(BufferedInputStream和BufferedOutputStream)和字符緩衝流(BufferedReader和BufferedWrite)。
3:緩衝流對字節文件拷貝的應用(代碼示例):
  public class CopyFile {
public static void main(String[] args) throws IOException {
CopyFile c = new CopyFile();
c.copy();
}


public void copy() throws IOException {
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream("C:\\Users\\huangxiong\\Desktop\\test.txt"));// 對輸入流進行包裝
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream("C:\\Users\\huangxiong\\Desktop\\test1.txt"));// 對輸出流進行包裝
int len;
while ((len = bis.read()) != -1) {
bos.write(len);
}
bis.close();
bos.close();
}
}
4:緩衝流屬於包裝流,只能對已有的流進行包裝,使原來的流更加強大,執行效率更高,不能關聯文件。


二:數據流(DataInputStream,DataOutputStream)
1:定義:數據流是對8大基本數據類型的數據進行內存與硬盤之間互相訪問的流,屬於包裝流,包裝後使原來的流傳輸數據更加方便
2:分類:數據流只有字節流,沒有字符流。
3:數據流對文件的拷貝(代碼示例)
 
public void copy1() throws IOException{
int a = 201400;
long b = 1000000000;
boolean c = true;
DataOutputStream dos = new DataOutputStream(new BufferedOutputStream
(new FileOutputStream("C:\\Users\\huangxiong\\Desktop\\test.txt")));//用緩衝流和數據流分別對FileOuyputStream進行包裝
   dos.writeInt(a);
dos.writeLong(b);
dos.writeBoolean(c);
dos.close();              //流一結束,就關閉流
DataInputStream dis = new DataInputStream(
new BufferedInputStream(new FileInputStream("C:\\Users\\huangxiong\\Desktop\\test.txt")));
int a1 = dis.readInt();
long b1 = dis.readLong();
boolean c1 = dis.readBoolean();
System.out.println(a1);
System.out.println(b1);
System.out.println(c1);
dis.close();
}

三:對象流(ObjectInputStream,ObjectOutputStream)

1:定義:對象流傳輸的是一個對象,在我們需要保存一個對象的很多屬性的時候,用對象流可以簡化代碼,更加方便2:分類:輸入對象流和輸出對象流

2:對象流也屬於包裝流,包裝後使原來的流具有對對象進行讀寫的功能

3:對象流實現對象的拷貝(代碼示例)
try {
//把對象寫入文件
ArrayList<Student> list = new ArrayList<Student>();
Student stu = new Student("張三",30);
list.add(stu);
//對象流操作,直接寫入或者讀入對象
FileOutputStream fos = new FileOutputStream("test_4.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
//可以直接寫出對象
oos.writeObject(list);
oos.flush();
oos.close();
//從文件中讀取對象
FileInputStream fis = new FileInputStream("test_4.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
@SuppressWarnings("unchecked")
ArrayList<Student> stuList = (ArrayList<Student>)ois.readObject();
ois.close();
for (int i = 0; i < stuList.size(); i++) {
Student stu1 = stuList.get(i);
System.out.println(stu1.name+"   "+stu1.age);
}
       } catch (Exception e) {
e.printStackTrace();
}
}

             }

Student類:


package com.huaxin.io;
import java.io.Serializable;


public class Student implements Serializable{
public String name;
public int age;

public Student(String name,int age){
this.name = name;
this.age = age;
}
}


DataInputStream 基本數據輸

DataInputStream(FileInputStream out);創建一個新的數據輸出流,讀取數據指定基礎輸出流。     

    讀取一個字節read(int b);

    讀取字節數組的某一部分read(byte[] b,int start, int len)

    讀取一個int類型的數據readInt(int i);

             float類型的數據readFloat(float i);

             Char類型的數據readChar(int i);

 

 DataOutputStream 基本數據輸出流  

DataOutputStream(FileOutputStream out);創建一個新的數據輸出流,將數據寫入指定基礎輸出流。     

    寫入一個字節write(int b);

    寫入字節數組的某一部分write(byte[] b,int start, int len)

    寫入一個int類型的數據writeInt(int i);

             float類型的數據writeFloat(float i);

             Char類型的數據writeChar(int i);


ObjectInputStream 對象輸入流

ObjectInputStream(FileInputStream out);創建一個新的數據輸出流,讀取數據指定基礎輸出流。 

讀取一個對象readObject();

    

ObjectOutputStream 對象輸出流

ObjectOutputStream(FileOutputStream out);創建一個新的數據輸出流,將數據寫入指定基礎輸出流。 

 寫入一個對象writeObject(Object obj);



字節流(FileInputStream/FileOutputStream

 FileInputStream文件字節流的讀取的常用的構造方法有兩種:  

FileInputStream(File file): 創建一個FileInputStream對象,打開指定的File對象file 

 FileInputStream(String name): 創建一個FileInputStream對象,通過指定路徑的文件名打開




文件字符流(FileReader/FileWriter)

 FileReader文件字符流的讀取

               直接讀取一個字符read()或者read(char ch);

               直接讀取一個字符數組read(char[] ch);

               讀取字符數組的某一部分read(char[] ch,int start, int len);

FileReader文件字符流的讀取的常用構造方法有兩種

 FileReader(File file);在給定從中讀取數據的 File 的情況下創建一個新 FileReader。

 FileReader(String str); 在給定從中讀取數據的文件名的情況下創建一個新 FileReader。

 




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