java.io.Buffer * stream与普通流不同?
1)缓冲流如何在后台工作,它们与普通流有什么不同,使用它们的优点是什么?
2)DataInputStream也是基于字节的.但它有方法来readLine().这里有什么要点? 解决方法
从BufferedInputStream
javadoc:
在内部使用缓冲区数组,而不是从底层输入流单独读取字节,读取足够的字节来填充缓冲区.这通常导致更快的性能,因为底层输入流需要较少的读取. 对于BufferedOutputStream则是相反的. mark()和reset()可以如下使用: 1 BufferedInputStream bis = new BufferedInputStream(is); 2 byte[] b = new byte[4]; 3 bis.read(b); // read 4 bytes into b 4 bis.mark(10); // mark the stream at the current position - we can read 10 bytes before the mark point becomes invalid 5 bis.read(b); // read another 4 bytes into b 6 bis.reset(); // resets the position in the stream back to when mark was called 7 bis.read(b); // re-read the same 4 bytes as line 5 into b 解释标记/重置一些更多… BufferInputStream内部记住缓冲区中的当前位置.当您读取字节时,位置将递增.标记(10)的电话将保存当前位置.随后的读取调用将继续增加当前位置,但是当调用mark时,调用reset将将当前位置设置为其值. 标记的参数指定在标记位置无效之前调用标记后可以读取的字节数.一旦标记位置无效,您就不能再调用重置来返回. 例如,如果在第4行中使用了mark(2),则当在第6行调用reset()时,将会抛出IOException,因为标记位置将被无效,因为我们读取超过2个字节. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |