鴻蒙OS PipedInputStream

2022-10-24 10:59 更新

PipedInputStream

java.lang.Object

|---java.io.InputStream

|---|---java.io.PipedInputStream

public class PipedInputStream
extends InputStream

管道輸入流應(yīng)該連接到管道輸出流; 然后,管道輸入流提供寫入管道輸出流的任何數(shù)據(jù)字節(jié)。 通常,數(shù)據(jù)由一個(gè)線程從 PipedInputStream 對(duì)象讀取,數(shù)據(jù)由其他線程寫入相應(yīng)的 PipedOutputStream。 不建議嘗試從單個(gè)線程中使用這兩個(gè)對(duì)象,因?yàn)樗赡軙?huì)使線程死鎖。 管道輸入流包含一個(gè)緩沖區(qū),在限制范圍內(nèi)將讀取操作與寫入操作分離。 如果向連接的管道輸出流提供數(shù)據(jù)字節(jié)的線程不再活動(dòng),則稱該管道已損壞。

Since:

JDK1.0

字段摘要

修飾符和類型 字段 描述
protected byte[] buffer 放置傳入數(shù)據(jù)的循環(huán)緩沖區(qū)。
protected int in 當(dāng)從連接的管道輸出流接收時(shí),循環(huán)緩沖區(qū)中將存儲(chǔ)下一個(gè)字節(jié)數(shù)據(jù)的位置的索引。
protected int out 此管道輸入流將讀取下一個(gè)數(shù)據(jù)字節(jié)的循環(huán)緩沖區(qū)中位置的索引。
protected static int PIPE_SIZE 管道的循環(huán)輸入緩沖區(qū)的默認(rèn)大小。

構(gòu)造函數(shù)摘要

構(gòu)造函數(shù) 描述
PipedInputStream() 創(chuàng)建一個(gè) PipedInputStream 以便它尚未連接。
PipedInputStream(int pipeSize) 創(chuàng)建一個(gè) PipedInputStream 以便它尚未連接并使用指定的管道大小作為管道緩沖區(qū)。
PipedInputStream(PipedOutputStream src) 創(chuàng)建一個(gè) PipedInputStream 以便它連接到管道輸出流 src。
PipedInputStream(PipedOutputStream src, int pipeSize) 創(chuàng)建一個(gè) PipedInputStream 以便它連接到管道輸出流 src 并為管道緩沖區(qū)使用指定的管道大小。

方法總結(jié)

修飾符和類型 方法 描述
int available() 返回可以不阻塞地從此輸入流中讀取的字節(jié)數(shù)。
void close() 關(guān)閉此管道輸入流并釋放與該流關(guān)聯(lián)的任何系統(tǒng)資源。
void connect(PipedOutputStream src) 導(dǎo)致此管道輸入流連接到管道輸出流 src。
int read() 從此管道輸入流中讀取數(shù)據(jù)的下一個(gè)字節(jié)。
int read(byte[] b, int off, int len) 從此管道輸入流中讀取最多 len 個(gè)字節(jié)的數(shù)據(jù)到一個(gè)字節(jié)數(shù)組中。
protected void receive(int b) 接收一個(gè)字節(jié)的數(shù)據(jù)。
從類 java.io.InputStream 繼承的方法
mark, markSupported, read, reset, skip
從類 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

字段詳細(xì)信息

PIPE_SIZE

protected static final int PIPE_SIZE

管道的循環(huán)輸入緩沖區(qū)的默認(rèn)大小。

Since:

JDK1.1

buffer

protected byte[] buffer

放置傳入數(shù)據(jù)的循環(huán)緩沖區(qū)。

Since:

JDK1.1

in

protected int in

當(dāng)從連接的管道輸出流接收時(shí),循環(huán)緩沖區(qū)中將存儲(chǔ)下一個(gè)字節(jié)數(shù)據(jù)的位置的索引。 in<0 表示緩沖區(qū)為空,in==out 表示緩沖區(qū)已滿

Since:

JDK1.1

out

protected int out

此管道輸入流將讀取下一個(gè)數(shù)據(jù)字節(jié)的循環(huán)緩沖區(qū)中位置的索引。

Since:

JDK1.1

構(gòu)造函數(shù)詳細(xì)信息

PipedInputStream

public PipedInputStream(PipedOutputStream src) throws IOException

創(chuàng)建一個(gè) PipedInputStream 以便它連接到管道輸出流 src。 然后,寫入 src 的數(shù)據(jù)字節(jié)將可用作此流的輸入。

參數(shù):

參數(shù)名稱 參數(shù)描述
src 要連接的流。

Throws:

Throw名稱 Throw描述
IOException 如果發(fā)生 I/O 錯(cuò)誤。

PipedInputStream

public PipedInputStream(PipedOutputStream src, int pipeSize) throws IOException

創(chuàng)建一個(gè) PipedInputStream 以便它連接到管道輸出流 src 并為管道緩沖區(qū)使用指定的管道大小。 然后,寫入 src 的數(shù)據(jù)字節(jié)將可用作此流的輸入。

參數(shù):

參數(shù)名稱 參數(shù)描述
src 要連接的流。
pipeSize 管道緩沖區(qū)的大小。

Throws:

Throw名稱 Throw描述
IOException 如果發(fā)生 I/O 錯(cuò)誤。
IllegalArgumentException 如果管道大小 <= 0。

Since:

1.6

PipedInputStream

public PipedInputStream()

創(chuàng)建一個(gè) PipedInputStream 以便它尚未連接。 在使用之前,它必須連接到 PipedOutputStream。

PipedInputStream

public PipedInputStream(int pipeSize)

創(chuàng)建一個(gè) PipedInputStream 以便它尚未連接并使用指定的管道大小作為管道緩沖區(qū)。 在使用之前,它必須連接到 PipedOutputStream。

參數(shù):

參數(shù)名稱 參數(shù)描述
pipeSize 管道緩沖區(qū)的大小。

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果 pipeSize <= 0.

Since:

1.6

方法詳情

connect

public void connect(PipedOutputStream src) throws IOException

導(dǎo)致此管道輸入流連接到管道輸出流 src。 如果此對(duì)象已連接到其他管道輸出流,則會(huì)引發(fā) IOException。

如果 src 是一個(gè)未連接的管道輸出流并且 snk 是一個(gè)未連接的管道輸入流,它們可以通過以下任一調(diào)用連接:

snk.connect(src) 

或調(diào)用:

src.connect(snk) 

這兩個(gè)調(diào)用具有相同的效果。

參數(shù):

參數(shù)名稱 參數(shù)描述
src 要連接的管道輸出流。

Throws:

Throw名稱 Throw描述
IOException 如果發(fā)生 I/O 錯(cuò)誤。

receive

protected void receive(int b) throws IOException

接收一個(gè)字節(jié)的數(shù)據(jù)。 如果沒有可用的輸入,此方法將阻塞。

參數(shù):

參數(shù)名稱 參數(shù)描述
b 正在接收的字節(jié)

Throws:

Throw名稱 Throw描述
IOException 如果管道損壞、未連接、關(guān)閉或發(fā)生 I/O 錯(cuò)誤。

Since:

JDK1.1

read

public int read() throws IOException

從此管道輸入流中讀取數(shù)據(jù)的下一個(gè)字節(jié)。 值字節(jié)以 0 到 255 范圍內(nèi)的 int 形式返回。此方法阻塞,直到輸入數(shù)據(jù)可用、檢測(cè)到流結(jié)束或引發(fā)異常。

指定者:

讀入類 InputStream

返回:

數(shù)據(jù)的下一個(gè)字節(jié),如果到達(dá)流的末尾,則為 -1。

Throws:

Throw名稱 Throw描述
IOException 如果管道未連接、損壞、關(guān)閉或發(fā)生 I/O 錯(cuò)誤。

read

public int read(byte[] b, int off, int len) throws IOException

從此管道輸入流中讀取最多 len 個(gè)字節(jié)的數(shù)據(jù)到一個(gè)字節(jié)數(shù)組中。 如果到達(dá)數(shù)據(jù)流的末尾或 len 超過管道的緩沖區(qū)大小,則將讀取少于 len 個(gè)字節(jié)。 如果 len 為零,則不讀取任何字節(jié)并返回 0; 否則,該方法將阻塞,直到至少有 1 個(gè)字節(jié)的輸入可用、檢測(cè)到流結(jié)束或拋出異常。

覆蓋:

讀入類 InputStream

參數(shù):

參數(shù)名稱 參數(shù)描述
b 讀取數(shù)據(jù)的緩沖區(qū)。
off 目標(biāo)數(shù)組 b 中的起始偏移量
len 讀取的最大字節(jié)數(shù)。

返回:

讀入緩沖區(qū)的總字節(jié)數(shù),如果由于到達(dá)流的末尾而沒有更多數(shù)據(jù),則為 -1。

Throws:

Throw名稱 Throw描述
NullPointerException 如果 b 為空。
IndexOutOfBoundsException 如果 off 為負(fù)數(shù),len 為負(fù)數(shù),或者 len 大于 b.length - off
IOException 如果管道損壞、未連接、關(guān)閉或發(fā)生 I/O 錯(cuò)誤。

available

public int available() throws IOException

返回可以不阻塞地從此輸入流中讀取的字節(jié)數(shù)。

覆蓋:

在類 InputStream 中可用

返回:

可以在不阻塞的情況下從此輸入流中讀取的字節(jié)數(shù),如果此輸入流已通過調(diào)用其 close() 方法關(guān)閉,或者管道未連接或損壞,則為 0。

Throws:

Throw名稱 Throw描述
IOException 如果發(fā)生 I/O 錯(cuò)誤。

Since:

JDK1.0.2

close

public void close() throws IOException

關(guān)閉此管道輸入流并釋放與該流關(guān)聯(lián)的任何系統(tǒng)資源。

指定者:

在接口 AutoCloseable 中關(guān)閉

指定者:

在接口Closeable中關(guān)閉

覆蓋:

在類 InputStream 中關(guān)閉

Throws:

Throw名稱 Throw描述
IOException 如果發(fā)生 I/O 錯(cuò)誤。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)