java流:列印流,序列流,資料流,記憶體流
阿新 • • 發佈:2018-11-27
列印流:位元組列印流PrintStream
package com.qianfeng.test; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; /* * 列印流:除了擁有輸出流的特點之外,還有列印的功能,比如println,print等方法。 * 分成兩種: * 位元組列印流:PrintStream * 字元列印流:PrintWriter * * 位元組列印流: * 可以直接關聯的裝置(傳入的引數) * 1.File型別的檔案 * 2.字串型別的檔案 * 3.位元組輸出流 * */ public class Demo5 { public static void main(String[] args) throws IOException { // * 1.File型別的檔案 //PrintStream printStream = new PrintStream(new File("D:\\workspace\\32\\BigData1715N21\\src\\com\\qianfeng\\test\\Demo1.java")); // * 2.字串型別的檔案 //PrintStream printStream = new PrintStream("temp3.txt");//對於當前的檔案,如果不存在,會自動建立。 // * 3.位元組輸出流 PrintStream printStream = new PrintStream(new FileOutputStream("temp3.txt")); //講解print()方法的原理 printStream.write(97);//00000000 00000000 00000000 01100001 在列印的時候將前面三個位元組砍掉了,得到a printStream.write(353);//00000000 00000000 00000001 01100001 在列印的時候將前面三個位元組砍掉了,得到a printStream.print(353); //先將353轉成字串再轉成位元組陣列 printStream.write(String.valueOf(353).getBytes()); printStream.close(); } }
列印流:字元列印流PrintWriter
package com.qianfeng.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; /* * 字元列印流: * 可以直接關聯的裝置(傳入的引數) * 1.File型別的檔案 * 2.字串型別的檔案 * 3.位元組輸出流 * 4.字元寫出流 */ public class Demo6 { public static void main(String[] args) throws IOException { //例項:將資料從鍵盤接收到控制檯 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); //建立字元列印流 PrintWriter printWriter = new PrintWriter(System.out); String data = null; while((data=bufferedReader.readLine())!=null){ printWriter.println(data); printWriter.flush(); } bufferedReader.close(); printWriter.close(); } }
序列流
package com.qianfeng.test; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.SequenceInputStream; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.Vector; public class Demo7{ /* * 序列流:把多個輸入流的內容一次性的列印(操作)---位元組流 */ public static void main(String[] args) throws IOException { //建立三個輸入流 FileInputStream fileInputStream1 = new FileInputStream("src\\com\\qianfeng\\test\\Demo2.java"); FileInputStream fileInputStream2 = new FileInputStream("src\\com\\qianfeng\\test\\Demo2.java"); FileInputStream fileInputStream3 = new FileInputStream("src\\com\\qianfeng\\test\\Demo1.java"); //將三個輸入流放入序列流 //方式一:先放入一個Vector // Vector<FileInputStream> vector = new Vector<>(); // vector.add(fileInputStream1); // vector.add(fileInputStream2); // vector.add(fileInputStream3); // // //得到列舉器 // Enumeration<FileInputStream> e1 = vector.elements(); //方式二:先放入一個list ArrayList<FileInputStream> list = new ArrayList<>(); list.add(fileInputStream1); list.add(fileInputStream2); list.add(fileInputStream3); //將集合轉換成列舉 Enumeration<FileInputStream> e2 = Collections.enumeration(list); //建立序列流物件並關聯相關的檔案--引數是一個列舉器 //SequenceInputStream sequenceInputStream = new SequenceInputStream(e1); SequenceInputStream sequenceInputStream = new SequenceInputStream(e2); //建立輸出流 FileOutputStream fileOutputStream = new FileOutputStream("temp2.txt"); //讀寫 byte[] arr = new byte[1024]; int num; while ((num = sequenceInputStream.read(arr)) != -1) { fileOutputStream.write(arr, 0, num); fileOutputStream.flush(); } sequenceInputStream.close(); fileOutputStream.close(); } }
資料流
package com.qianfeng.test;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo8 {
/*
* 資料流:位元組流
* DataInputStream: 資料輸入流
* DataOutputStream: 資料輸出流
*
* 注意:資料流要與位元組輸入流,輸出流配合使用
*/
public static void main(String[] args) throws IOException {
//寫
writeData();
//讀
readData();
}
public static void writeData() throws IOException {
DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream("temp3.txt"));
//寫
dataOutputStream.writeInt(97);//4個位元組 00000000 00000000 000000000 011000001 00000001
dataOutputStream.writeBoolean(true);//1個
dataOutputStream.write(33);//1個
dataOutputStream.writeDouble(34.56);//8個
//關閉流
dataOutputStream.close();
}
public static void readData() throws IOException {
DataInputStream dataInputStream = new DataInputStream(new FileInputStream("temp3.txt"));
//這裡的boolean型和int型的資料,在讀的時候由於與之前寫的順序相反了,所以讀取的資料錯誤
/*
* 注意點:1.讀的順序要與寫的順序一致 2.型別保持一致
*/
System.out.println(dataInputStream.readBoolean());// 00000000
System.out.println(dataInputStream.readInt());//00000000 000000000 011000001 00000001
System.out.println(dataInputStream.readByte());
System.out.println(dataInputStream.readDouble());
dataInputStream.close();
}
}
記憶體流
package com.qianfeng.test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class Demo9 {
public static void main(String[] args) throws IOException {
/*
* 記憶體流(byte陣列流):
* ByteArrayInputStream:寫入記憶體,在內部有一個數組,資料被放在這裡面
* ByteArrayOutputStream:將資料取出,放在位元組數組裡面
*/
//建立輸入流,關聯一個byte型的陣列,作為緩衝區資料
ByteArrayInputStream bais = new ByteArrayInputStream("hello world".getBytes());
//建立輸出流-不需要指定引數
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] arr = new byte[1024];
int num;
while ((num = bais.read(arr)) != -1) {
baos.write(arr, 0, num);
}
System.out.println(new String(arr));
bais.close();
baos.close();
//注意:將流關閉了之後,還可以呼叫方法,不會報錯.
baos.write(45);
}
}