看的是Core Java
1. Streams通常是文件,但也可能是網絡連接,甚至是內存中的一塊。
2. 讀寫字節
InputStream的方法
abstract int read()
讀取一個byte并返回,如果到了輸入源的結尾就返回-1
InputStream類也有幾個非抽象的方法用于讀取若干個字節或是跳過若干個字節,但都需要調用read()方法,而子類繼承InputStream后也僅需要覆蓋read()方法即可。(注意此時繼承下來的讀取若干字節的方法調用了子類的read()方法)
類似的OutputStream類的方法
abstract void write(int b)
read和write方法都可以暫停某個線程,直到字節讀寫完成后再繼續。這就意味著如果無法及時從網絡上讀取信息的話,Java會使得這次調用掛起嗎,此時就可以讓其他的線程工作了。
available方法可以獲得當前可讀取的字節數,從而防止掛起:
int bytesAvailable = in.available();
if (bytesAvailable < 0)
{
byte[] data = new byte[bytesAvailable];
in.read(data);
}
對stream結束訪問后,使用close方法清理空間,以防系統資源耗竭。close方法同時也清洗了輸出流的緩沖區,如果沒有close,最后寫入的內容可能就無法送達了,不過也可以使用flush方法清洗緩沖區。
3. API
java.io.InputStream 1.0
abstract int read()
int read(byte[] b)
int read(byte[] b, int off, int len)
off參數為讀取的第一個字節寫入b數組的位置
long skip(long n)
返回實際跳過的字節數
int available()
void close()
void mark(int readlimit)
在當前位置做標記,如果讀取量超過了readlimit,就取消標記。并不是所有stream都支持mark
void reset()
回到上一個標記處。
boolean markSupported()
java.io.OutputStream 1.0
abstract void write(int n)
void write(byte[] b)
void write(byte[] b, int off, int len)
void close()
void flush()