Interface ByteInput
- All Superinterfaces:
AutoCloseable
- All Known Implementing Classes:
DefaultByteInput, NullByteInput
ByteInput
-
每次读取操作都是有意义的动作:read / readUpTo 在 length > 0 时至少读取一个字节. 这样保证动作不会成为空操作, 同时消除了 EOF 表达性歧义.
-
EOF(流结束) 是明确的信号: 当无法再读取任何字节时, 抛出
NoMoreDataException. 这保证循环读取的安全性和逻辑自洽性. -
方法对读取的容忍度分成三个级别:
-
read 方法族 长度为 0 的特殊处理: (看作一种无动作)
- read / readUpTo / readFully length = 0 -> 均采用同一策略, 立即返回, 不抛异常, 即使流已结束.
-
空模式 indexOf 的特殊处理: (看作一种无动作)
- 恒返回 0.
-
读取操作必须产生有效数据, 否则动作没有意义.
- EOF 是动作完成的标志, 而不是普通返回值.
- 严格契约保证用户可以安全循环读取, 同时明确何时流结束.
-
该接口设计偏向严格契约和动作完整性, 而非宽松返回空数组. 这保证了 EOF 明确、循环安全, 并消除了 "0 字节读取歧义" .
- Version:
- 0.0.1
- Author:
- scx567888
-
Method Summary
Modifier and TypeMethodDescriptionvoidclose()default longindexOf(byte b) default longindexOf(byte[] b) default longindexOf(byte[] b, long maxLength) default longindexOf(byte b, long maxLength) longindexOf(ByteIndexer indexer, long maxLength) 在最多 maxLength 个字节中查找匹配 (或直到 EOF).booleanisClosed()voidmark()标记当前读取位置.bytepeek()查看字节, 行为参考read()default byte[]peek(int maxLength) <X extends Throwable>
voidpeek(ByteConsumer<X> byteConsumer, long maxLength) 查看字节, 行为参考read(ByteConsumer, long)default byte[]peekAll()default <X extends Throwable>
voidpeekAll(ByteConsumer<X> byteConsumer) default byte[]peekFully(int length) <X extends Throwable>
voidpeekFully(ByteConsumer<X> byteConsumer, long length) 查看字节, 行为参考readFully(ByteConsumer, long)default byte[]peekUntil(byte b) default byte[]peekUntil(byte[] b) default byte[]peekUntil(byte[] b, int maxLength) default byte[]peekUntil(byte b, int maxLength) default byte[]peekUpTo(int length) <X extends Throwable>
voidpeekUpTo(ByteConsumer<X> byteConsumer, long length) 查看字节, 行为参考readUpTo(ByteConsumer, long)byteread()读取单个字节default byte[]read(int maxLength) <X extends Throwable>
voidread(ByteConsumer<X> byteConsumer, long maxLength) 最多读取 maxLength 个字节, 可能少于 maxLength (即使尚未遇到 EOF, 如底层缓冲区不足)default byte[]readAll()default <X extends Throwable>
voidreadAll(ByteConsumer<X> byteConsumer) default byte[]readFully(int length) <X extends Throwable>
voidreadFully(ByteConsumer<X> byteConsumer, long length) 恰好读取 length 个字节default byte[]readUntil(byte b) default byte[]readUntil(byte[] b) default byte[]readUntil(byte[] b, int maxLength) default byte[]readUntil(byte b, int maxLength) default byte[]readUpTo(int length) <X extends Throwable>
voidreadUpTo(ByteConsumer<X> byteConsumer, long length) 尽量读取 length 个字节, 可能少于 length (仅在 EOF 时发生)voidreset()将读取位置恢复到上一次 mark() 时的状态.default longskip(long length) default longskipFully(long length) default longskipUpTo(long length)
-
Method Details
-
read
读取单个字节
- 如果 当前没有数据可读 (立即遇到 EOF), 则会抛出 NoMoreDataException
-
read
<X extends Throwable> void read(ByteConsumer<X> byteConsumer, long maxLength) throws X, ScxIOException, AlreadyClosedException, NoMoreDataException 最多读取 maxLength 个字节, 可能少于 maxLength (即使尚未遇到 EOF, 如底层缓冲区不足)
- 如果 maxLength = 0, 立即返回 (不抛出异常, 即使在 EOF 状态)
- 如果 maxLength > 0, 至少读取 1 个字节.
- 如果 数据不足 (读取过程中遇到 EOF), 则停止读取
- 如果 当前没有数据可读 (立即遇到 EOF), 则会抛出 NoMoreDataException
-
readUpTo
<X extends Throwable> void readUpTo(ByteConsumer<X> byteConsumer, long length) throws X, ScxIOException, AlreadyClosedException, NoMoreDataException 尽量读取 length 个字节, 可能少于 length (仅在 EOF 时发生)
- 如果 length = 0, 立即返回 (不抛出异常, 即使在 EOF 状态)
- 如果 length > 0, 至少读取 1 个字节.
- 如果 数据不足 (读取过程中遇到 EOF), 则停止读取
- 如果 当前没有数据可读 (立即遇到 EOF), 则会抛出 NoMoreDataException
-
readFully
<X extends Throwable> void readFully(ByteConsumer<X> byteConsumer, long length) throws X, ScxIOException, AlreadyClosedException, NoMoreDataException 恰好读取 length 个字节
- 如果 length = 0, 立即返回且不抛出异常 (即使在 EOF 状态)
- 如果 length > 0. 一定读取 length 个字节.
- 如果 数据不足 (读取过程中遇到 EOF), 则会抛出 NoMoreDataException
- 如果 当前没有数据可读 (立即遇到 EOF), 则会抛出 NoMoreDataException
-
peek
查看字节, 行为参考read() -
peek
<X extends Throwable> void peek(ByteConsumer<X> byteConsumer, long maxLength) throws X, ScxIOException, AlreadyClosedException, NoMoreDataException 查看字节, 行为参考read(ByteConsumer, long) -
peekUpTo
<X extends Throwable> void peekUpTo(ByteConsumer<X> byteConsumer, long length) throws X, ScxIOException, AlreadyClosedException, NoMoreDataException 查看字节, 行为参考readUpTo(ByteConsumer, long) -
peekFully
<X extends Throwable> void peekFully(ByteConsumer<X> byteConsumer, long length) throws X, ScxIOException, AlreadyClosedException, NoMoreDataException 查看字节, 行为参考readFully(ByteConsumer, long) -
indexOf
long indexOf(ByteIndexer indexer, long maxLength) throws NoMatchFoundException, ScxIOException, AlreadyClosedException, NoMoreDataException 在最多 maxLength 个字节中查找匹配 (或直到 EOF).
- 如果 indexer 是 空匹配模式. (意味着没有消费数据的能力和意义)
- 在任意情况下都返回 0. (恒为 0)
- 如果 indexer 不是 空匹配模式.
- 如果 maxLength = 0, 抛 NoMatchFoundException (恒 NoMatch, 因为这是不可能完成的任务).
- 如果 maxLength > 0. (正常逻辑)
- 如果在边界达成条件内仍未匹配到 (如达到 maxLength限制 或 读取过程中遇到 EOF) 抛出 NoMatchFoundException.
- 如果 当前没有数据可读 (立即遇到 EOF), 则会抛出 NoMoreDataException.
- 如果 indexer 是 空匹配模式. (意味着没有消费数据的能力和意义)
-
mark
标记当前读取位置.
- 每次调用 mark() 会覆盖上一次的标记 (即不支持嵌套 mark)
- Throws:
AlreadyClosedException
-
reset
将读取位置恢复到上一次 mark() 时的状态.
- 若尚未调用 mark(), 则无效果.
- 调用 reset() 不会清除标记, 可重复 reset().
- Throws:
AlreadyClosedException
-
isClosed
boolean isClosed() -
close
- Specified by:
closein interfaceAutoCloseable- Throws:
ScxIOException
-
read
default byte[] read(int maxLength) throws ScxIOException, AlreadyClosedException, NoMoreDataException -
readUpTo
default byte[] readUpTo(int length) throws ScxIOException, AlreadyClosedException, NoMoreDataException -
readFully
default byte[] readFully(int length) throws ScxIOException, AlreadyClosedException, NoMoreDataException -
readAll
-
readAll
default <X extends Throwable> void readAll(ByteConsumer<X> byteConsumer) throws X, ScxIOException, AlreadyClosedException, NoMoreDataException -
peek
default byte[] peek(int maxLength) throws ScxIOException, AlreadyClosedException, NoMoreDataException -
peekUpTo
default byte[] peekUpTo(int length) throws ScxIOException, AlreadyClosedException, NoMoreDataException -
peekFully
default byte[] peekFully(int length) throws ScxIOException, AlreadyClosedException, NoMoreDataException -
peekAll
-
peekAll
default <X extends Throwable> void peekAll(ByteConsumer<X> byteConsumer) throws X, ScxIOException, AlreadyClosedException, NoMoreDataException -
skip
-
skipUpTo
default long skipUpTo(long length) throws ScxIOException, AlreadyClosedException, NoMoreDataException -
skipFully
default long skipFully(long length) throws ScxIOException, AlreadyClosedException, NoMoreDataException -
indexOf
default long indexOf(byte b) throws NoMatchFoundException, ScxIOException, AlreadyClosedException, NoMoreDataException -
indexOf
default long indexOf(byte b, long maxLength) throws NoMatchFoundException, ScxIOException, AlreadyClosedException, NoMoreDataException -
indexOf
default long indexOf(byte[] b) throws NoMatchFoundException, ScxIOException, AlreadyClosedException, NoMoreDataException -
indexOf
default long indexOf(byte[] b, long maxLength) throws NoMatchFoundException, ScxIOException, AlreadyClosedException, NoMoreDataException -
readUntil
default byte[] readUntil(byte b) throws NoMatchFoundException, ScxIOException, AlreadyClosedException, NoMoreDataException -
readUntil
default byte[] readUntil(byte b, int maxLength) throws NoMatchFoundException, ScxIOException, AlreadyClosedException, NoMoreDataException -
readUntil
default byte[] readUntil(byte[] b) throws NoMatchFoundException, ScxIOException, AlreadyClosedException, NoMoreDataException -
readUntil
default byte[] readUntil(byte[] b, int maxLength) throws NoMatchFoundException, ScxIOException, AlreadyClosedException, NoMoreDataException -
peekUntil
default byte[] peekUntil(byte b) throws NoMatchFoundException, ScxIOException, AlreadyClosedException, NoMoreDataException -
peekUntil
default byte[] peekUntil(byte b, int maxLength) throws NoMatchFoundException, ScxIOException, AlreadyClosedException, NoMoreDataException -
peekUntil
default byte[] peekUntil(byte[] b) throws NoMatchFoundException, ScxIOException, AlreadyClosedException, NoMoreDataException -
peekUntil
default byte[] peekUntil(byte[] b, int maxLength) throws NoMatchFoundException, ScxIOException, AlreadyClosedException, NoMoreDataException
-