1. 程式人生 > >記憶體操作流

記憶體操作流

outputStream,InputStream這個檔案一定會被建立,需要發生IO處理,但是又不希望產生檔案,可以使用記憶體作為操作的終端,記憶體操作流比較麻煩,也包含記憶體位元組流、記憶體字元流。位元組記憶體流:ByteArrayInputStream ByteArrayOutputStream字元記憶體流:CharArrayReaderCharArrayWriter有一個小小的問題,以檔案讀為例,每次讀滿陣列,之後考慮別的。通過記憶體流,實現一個大小寫做轉換大操作。


import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;public class CopyTest {
 public static void main(String[] args) throws Exception {
  String msg = "hello World";
  // 例項化InputStream類物件,例項化的時候需要將你操作的資料儲存到記憶體之中,最終你讀取的就是你設定的內容。
  InputStream input = new ByteArrayInputStream(msg.getBytes());
  OutputStream output = new ByteArrayOutputStream();
  int temp = 0;
  while ((temp = input.read()) != -1) {
   output.write(Character.toUpperCase(temp));
  }
  System.out.println(output);
  input.close();
  output.close();
 }
}

檔案合併,兩個檔案的OUtputStream資料都可以儲存在程式內,利用這一特徵將檔案合併。如果要讀取檔案,最好是讀取File 物件。如果只傳檔名稱。名稱就要在簽名宣告上檔案的目錄利用記憶體流讀資料 開闢一個記憶體流不產生記憶體檔案,有IO,但是沒有檔案,讓這個資料一次性全部讀取出來。ByteArrayOutputStream類中有一個“頭ByteArray方法,public byte[] toByteArray()表示將所有讀取到了byteArray中的資料,都用位元組陣列輸出出來。

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;public class CopyTest{
 public static void main(String[] args) throws Exception {
  File file[] =new File[] {
    new File("d:"+File.separator+"dataa.txt"),
    new File("d:"+File.separator+"datab.txt")
  };
  System.out.println(readFile(file[0])+readFile(file[1]));
  String data[]=new String[2];
  for (int i = 0; i < file.length; i++) {
   data[i]=readFile(file[i]);
  }
  StringBuffer buf=new StringBuffer();
  String contentA[]= data[0].split(" ");
  String contentB[]= data[1].split(" ");
  for(int i=0;i<contentA.length;i++) {
   buf.append(contentA[i]).append("(").append(contentB[i]).append(")").append(" ");
  }
  System.out.println(buf);
 }
 public static String readFile(File file) throws Exception{
  if(file.exists()) {
   InputStream input=new FileInputStream(file);//toByteArray 是子類擴充的方法。
   ByteArrayOutputStream bos=new ByteArrayOutputStream();
   byte data[]=new byte[10];
   int temp=0;
   while((temp = input.read(data))!=-1) {//內容都在記憶體流中
    bos.write(data,0,temp);
   }
   bos.close();
   input.close();
   return new String(bos.toByteArray());//將讀取的內容返回
  }
  return null;
  
 }
}

記憶體流最大的好處,如果只是使用INputStream類,在進行資料讀取的時
候,會存在缺陷,而結合記憶體流的操作就會好很多,但是目前而言使用很少。