java:OutputStream和InputStream 輸出輸入流,FileOutputStream,FileInputStream寫入讀取流


1、在java中stream代表一種數據流(源),javaio的底層數據元,---(想像成水龍頭)
2、任何有能力產生數據流(源)的javaio對象就可以看作是一個InputStream對象
既然它能產生出數據,我們就可以將數據取出,java對封裝的通用方法就read()方法了--(出水龍頭)
3、任何有能力接收數據源(流)的javaio對象我們就可以看作是一個OutputStream對象
同樣,它能接收數據,我們就可以調用它的write方法,來讓它接收數據--(進水龍頭了,呵呵)
4、當然,我們可以在Inputstream和OutputStream數據源的基礎上,從實際需要觸發,
來重新封裝出不同性能機制的輸入、輸出流了,java.io包中提供了很豐富的輸入、輸出流對象,如:
基於字節流的stream:
DataOutputStream----DataInputStream:
FileOutputStream-----FileInputStream:
.............等,可以用InputStream和OutputStream從JDK文檔查閱
基於字符流的stream(典型的以write和reader來標識的):
FileWriter---FileReader:
StringWriter---StringReader:
.........等,你自己可以用Writer和Reader從JDK文檔里頭查看說明
stream應該是水龍頭里的水資源,
InputStream:是一個出水龍頭(把水封裝在里頭)的一個實物對象,該對象的read方法呢,就想成這個
出水龍頭這一機制對象的開關鈕,你read或openStream(其他對象包容InputStream對象的對象方法)一下呢,就等於打開了出水龍頭的按鈕,水就出來了,里頭封裝的水是什么性質的呢,你就用相應的容器來裝,如string或byte[].....
OutputStream:你就在InputStream基礎上反着想就ok了 
-------------------------------------------------------------------------------------------------------------------------
OutputStream
(1)輸出數據
   void write(int b)往流中寫一個字節b
   void write(byte b[])往流中寫一個字節數組b
   void write(byte b[],int off,int len)把字節數組b中從下標off開始,長度為len的字節寫入流中
 (2)
   flush()刷空輸出流,並輸出所有被緩存的字節
           由於某些流支持緩存功能,該方法將把緩存中所有內容強制輸出到流中。
(3)關閉流
   close()流操作完畢后必須關閉。
------------------------------------------------------------------------------------------------------------------------
InputStream
(1)從流中讀取數據
   int read() 讀取一個字節,返回值為所讀得字節
   int read(byte b[]) 讀取多個字節,放置到字節數組b中,通常讀取的字節數量為b的長度,返回值為實際獨取的
                      字節的數量。
   int read(byte b[] ,int off,int len)讀取len個字節,放置到以下標off開始字節數組b中,返回值為實際
                                       讀取的字節的數量。
   int available() 返回值為流中尚未讀取的字節的數量。
   long skip(long n);讀指針跳過n個字節不讀,返回值為實際跳過的字節數量
(2)關閉流
   close() 流操作完畢后必須關閉
(3)使用輸入流中的標記
   void mark(int readlimit)紀錄當前指針的所在位置.readlimit表示讀指針讀出的readlimit個字節后
                           所標記的指針位置才實效。
   void reset() 把讀指針重新指向用mark方法所記錄的位置
   boolean markSupported() 當前的流是否支持讀指針的記錄功能。
-----------------------------------------------------------------------------------------------------------------------

Java IO通過Stream(流)來實現。關於流,可以理解為是一種“數據的管道”。管道中流動的東西可以是基於字節,也可以是基於字符的等。就好像管道里面可以流動水,也可以流動石油一樣。

而對應於流還有一個概念:輸入、輸出設備。這些設備可以是磁盤文件、鍵盤(輸入設備)、顯示器(輸出設備)、打印機(輸出設備)、網絡套接字等等。

 

 

	public static void main(String args[]) throws IOException
	{
		
		String str = args[0];
		File file = new File("F:"+File.separator+"work"+File.separator+"work"+File.separator+"demo.txt");
		
		if(str.equals("w"))
		{
			write(file);
		}else if(str.equals("r"))
		{
			read(file);
		}
	}
	
	public static void write(File file) throws IOException
	{
		OutputStream out = null;
		//追加內容寫入
		out = new FileOutputStream(file,true);
		//\r\n換行
		String str = "hello world\r\n";
		byte b[] = str.getBytes();
		for(int i=0; i < b.length; i++)
		{			
			out.write(b[i]);			
		}		
		out.close();
		
	}
	
	public static void read(File file) throws IOException{
		InputStream input = null;
		input = new FileInputStream(file);
		byte b[] = new byte[(int)file.length()];
		for(int i = 0; i < b.length; i++)
		{
			b[i] = (byte)input.read();
		}
		System.out.println(new String (b) );
		input.close();
	}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM