简介
ByteArrayInputStream 包含一个内部缓冲区,该缓冲区存储从流中读取的字节。内部计数器跟踪 read 方法要提供的下一个字节。关闭 ByteArrayInputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException。
方法摘要
int available() //返回可不发生阻塞地从此输入流读取的字节数。 void close() // 关闭 ByteArrayInputStream 无效。 void mark(int readHeadLimit) //设置流中的当前标记位置。 boolean markSupported() //测试此 InputStream 是否支持 mark/reset。 int read() //从此输入流中读取下一个数据字节。 int read(byte[]b,int off,int len) //将最多 len 个数据字节从此输入流读入字节数组。 void reset() //将缓冲区的位置重置为标记位置。 long skip(int n) //从此输入流中跳过 n 个输入字节。
例子
private static final int LEN = 5; // 对应英文字母“abcddefghijklmnopqrsttuvwxyz” private static final byte[] ArrayLetters = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A}; public static void main(String[] args) { ByteArrayInputStream bais = new ByteArrayInputStream(ArrayLetters); /** * 遍历数组中的字节流 */ for (int i = 0; i < LEN; i++) { /** * 是否可以读取5个字节 */ if (bais.available() > 0) { System.out.println("0x" + Integer.toHexString(bais.read())); } } /** * 不支持标记则直接退出 */ if (!bais.markSupported()) { System.out.println("mark no supported"); return; } /** * 标记“字节流中下一个被读取的位置”。 * 但是在ByteArrayInputStream类的mark(0)函数中的“参数0”是没有实际意义的。 */ bais.mark(0); byte[] buf = new byte[LEN]; bais.read(buf, 0, LEN); System.out.println(new String(buf)); /** * 跳过5个字符 */ bais.skip(5); bais.read(buf, 0, LEN); System.out.println(new String(buf)); /** * 重置“字节流”,及mark所标记的位置。 */ bais.reset(); bais.read(buf, 0, LEN); System.out.println(new String(buf)); /** * 深度解析mark与reset之间的关系、 * * mark()只是一个标记位,也就是标记字符流中下一个被读取的位置。 * reset()是是将字符流中下一个被读取的位置重置到mark()所标记的位置 * 使用的时候mark()和reset()是配套使用的 * */ }
浙公网安备 33010602011771号