Stream.Read 与 Stream.Write 这两个方法都是三个参数:byte[] buffer, int offset, int count。
但是这个 offset 到底是指 Stream 的还是 buffer 的呢?count 到底是指 Stream 的还是 buffer 的呢?还有一些细节,我们一同介绍如下 :
Stream.Read
从 Stream 的 Position 开始读取 count 个字节序列。
然后将读取出来的字节序列从 buffer 的 offset 位置开始存储在 buffer 中。
最后 Stream 的 Position 位置向后移动(读了多少个就移动多少)。
这个方法返回的是实际读取的字节数(因为流中也许没有 count 那么多字节)。
Stream.Write
从 buffer 的 offset 位置开始读取 count 个字节序列。
然后将读取出来的字节序列从 Stream 的 Position 位置开始存储在 Stream 中。
最后 Stream 的 Position 位置向后移动(写了多少个就移动多少)。
总结
- 读写 Stream 时,始终从 Stream 的 Position 开始。
- 读写 Stream 后,始终将 Stream 的 Position 后移。
- 读写 buffer 时,始终从 offset 开始。
- 而具体要操作多少个字节序列,则 count 决定。