記憶體操作流
阿新 • • 發佈:2019-01-12
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類,在進行資料讀取的時
候,會存在缺陷,而結合記憶體流的操作就會好很多,但是目前而言使用很少。