字符流相關知識總結(Reader and Write)

Reader主要方法
FileReader
示例
import java.io.*;
public class ReaderTest{
 public static void main(String args[]){
  try{
   char[] c = new char[100];
   FileReader f = new FileReader("Reader.txt");
   int len = f.read(c);
   while(len != -1){
    System.out.println(c);
    len = f.read(c);
   }
  }
  catch(Exception e){
   e.printStackTrace();
  }
 }
}
Write
主要方法
FileWrite
示例
import java.io.*;
public class WriterTest{
 public static void main(String args[]){
  try{
   char[] c = new char[100];
   String strTemp="";
   FileReader r = new FileReader("Reader.txt");
   FileWriter w = new FileWriter("Writer.txt");
   int len = r.read(c);
   while(len != -1){
    strTemp += new String(c,0,len);
    len = r.read(c);
   }   strTemp = strTemp.replaceAll("
","jin");
   w.write(strTemp);
   r.close();
   w.close();
  }
  catch(Exception e){
   System.out.println(e.getMessage());
  }
 }
}
InputStreamReader OutputStreamWriter
InputStreamReaderOutputStreamWriter 用於處理字節流和字符流之間的轉換。
爲了達到最高效率,可以考慮在 BufferedReader 內包裝 InputStreamReader
構造及方法
InputStreamReader
示例
import java.io.*;
public class InputStreamTest{
 public static void main(String args[]){
  try{
   char[] c = new char[100];
   InputStreamReader r = new InputStreamReader(new FileInputStream("Reader.txt"));
   int len = r.read(c);
   while(len != -1){
    System.out.println(c);
    len = r.read(c);
   }
  }
  catch(Exception e){
   System.out.println(e.getMessage());
  }
 }
}
OutputStreamWriter
示例
import java.io.*;
public class OutputStreamTest{
 public static void main(String args[]){
  try{
   char[] c = {'a','b','c','d'};
   OutputStreamWriter w = new OutputStreamWriter(new FileOutputStream("out.txt"));
   w.write(c);
   w.close();
   
   FileInputStream in = new FileInputStream("out.txt");
   int len = in.read();
   while(len != -1){
    System.out.println(len);
    len = in.read();
   }
   in.close();
  }
  catch(Exception e){
   System.out.println(e.toString());
  }
 }
}
BufferedReader BufferedWriter
爲了提高字符流處理的效率,引入了類BufferedReaderBufferedWriter對字符成塊的處理。
構造及方法
BufferedReader
示例
import java.io.*;
public class BufferedReaderTest{
 public static void main(String args[]){
  try{
   BufferedReader r = new BufferedReader(new FileReader("Reader.txt"));
   String strLine = r.readLine();
   while(strLine != null){
    System.out.println(strLine);
    strLine = r.readLine();
   }
  }
  catch(Exception e){
   System.out.println(e.toString());
  }
 }
}
BufferedWriter
示例
import java.io.*;
public class BufferedWriterTest{
 public static void main(String args[]){
  try{
   BufferedReader r = new BufferedReader(new FileReader("Reader.txt"));
   BufferedWriter w = new BufferedWriter(new FileWriter("Writer.txt"));
   String strLine = r.readLine();
   while(strLine != null){
    w.write(strLine);
    w.newLine();
    strLine = r.readLine();
   }
   w.close();
  }
  catch(Exception e){
   System.out.println(e.toString());
  }
 }
}
管道流
管道流用來把一個程序、線程或代碼塊的輸出連接到另一個程序、線程或代碼塊的輸入。
java.io
包中提供了類PipedInputStreamPipedOutputStream
管道輸入流作爲一個通信管道的接收端,管道輸出流則作爲發送端。
在使用管道前,管道輸出流和管道輸入流必須要進行連接。
管道流
管道輸入/輸出流連接的方式有: 1.在構造方法中給出對應的輸入/輸出流進行連接。 public PipedInputStream(PipedOutputStream src) public PipedOutputStream(PipedInputStream snk) 2.使用管道輸入/輸出流提供的方法connect()進行連接。 PipedInputStream中的定義爲:         public void connect(PipedOutputStream src) PipedOuputStream中的定義爲:         public void connect(PipedInputStream snk)
管道流示例
import java.io.*;
class Sender extends Thread{
 private DataOutputStream dataout;
 public Sender(PipedOutputStream out){
  dataout = new DataOutputStream(out);
 }
 
 public void run(){
  try{
   System.out.println("
準備發送數據...");
   dataout.writeUTF("Hello,Welcome to China");
   dataout.close();
  }
  catch(Exception e){
   System.out.println(e.toString());
  }
 }
}
管道流示例
class Receiver extends Thread{
 private DataInputStream datain;
 String strData;
 public Receiver(PipedInputStream in){
  datain = new DataInputStream(in);
 }
 
 public void run(){
  try{
   System.out.println("
準備接收數據...");
   strData = datain.readUTF();
   System.out.println(strData);
   datain.close();
  }
  catch(Exception e){
   System.out.println(e.toString());
  }
 }
}
管道流示例
public class PipedStreamTest{
 public static void main(String args[]){
  try{
   PipedOutputStream out = new PipedOutputStream();
   PipedInputStream in = new PipedInputStream();
   out.connect(in);
   System.out.println("
管道輸入輸出流已經連接好!");
   
   Thread t1 = new Sender(out);
   Thread t2 = new Receiver(in);
   t1.start();
   t2.start();
  }
  catch(Exception e){
   System.out.println(e.toString());
  }
 }
}
ByteArrayInputStream ByteArrayOutputStream StringBufferInputStream
通過類ByteArrayInputStream可以從字節數組中讀取數據,其初始化是在給定字節數組中完成的。
通過類ByteArrayOutputStream可以向字節數組中寫入數據,類中提供了緩衝區以存放數據,並且該緩衝區的大小可隨着數據的寫入而自動增加。
StringBufferInputStreamByteArrayInputStream基本類似,區別在於StringBufferInputStream是從字符串緩衝區StringBuffer中讀取16位的Unicode數據,而不是8位的字節數據。
ByteArrayInputStream
示例
import java.io.*;
public class ByteArrayTest{
 public static void main(String args[]){
  try{
   byte[] b1 = {97,98,99,100,101,102};
   byte[] b2 = new byte[100];
   
   ByteArrayInputStream in = new ByteArrayInputStream(b1);
   int len = in.read(b2);
   while(len != -1){
    System.out.println(new String(b2,0,len));
    len = in.read(b2);
   }
   in.close();
  }
  catch(Exception e){
   System.out.println(e.toString());
  }
 }
}
順序輸入流
java.io
包中提供了類SequenceInputStream,使應用程序可以把幾個輸入流順序地連接起來。
順序輸入流提供了把若干個不同的流統一成同一個流的功能,這使得程序可能變得更加簡潔。
SequenceInputStream
示例
import java.io.*;
public class SequenceTest{
 public static void main(String args[]){
  try{
   String strData;
   
   FileInputStream f1 = new FileInputStream("input1.txt");
   FileInputStream f2 = new FileInputStream("input2.txt");
   SequenceInputStream s = new SequenceInputStream(f1,f2);
   DataInputStream d = new DataInputStream(s);
   while ((strData = d.readLine()) != null){
    System.out.println(strData);    
   }   
  }
  catch(Exception e){
   System.out.println(e.toString());
  }
 }
}

 

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