public class Solution {
public static void Main(string[] args)
{
var raw = new byte[] { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5 };
using (var stream = new MemoryStream(3)) {
long size = stream.Length; // Actual 0, expected 0
long capacity = stream.Capacity; // Actual 3, expected 3
long position = stream.Position; // Actual 0, expected 0
stream.Write(raw, 0, raw.Length);
size = stream.Length; // Actual 6, expected 6
capacity = stream.Capacity; // Actual 256, expected big enough to hold content
position = stream.Position; // Actual 6, expected 6
var buffer = new byte[1];
stream.Read(buffer, 0, 1);
size = stream.Length; // Actual 6, expected 5
capacity = stream.Capacity; // Actual 256, expected same as before
position = stream.Position; // Actual 6, expected 5
stream.Write(raw, 0, raw.Length);
size = stream.Length; // Actual 12, expected 11
capacity = stream.Capacity; // Actual 256, expected same as before
position = stream.Position; // Actual 12, expected 11
stream.Seek(0, 0);
size = stream.Length; // Actual 12, expected 11
position = stream.Position; // Actual 0, expected 0
}
}
}
Я ожидаю, что чтение уменьшит размер на 1. Судя по всему, это не так. Тогда возникает вопрос: если байт сохраняется в памяти, а длина сообщается, включая прочитанные байты, когда он удаляется из памяти? (Мы не можем накапливать вечно!) и как нам получить длину текущего контента? (общее количество записанных байт - общее количество прочитанных байт)?
Изменить:
Я понял, что позиция остается в конце потока при первой записи, если вы не выполняете поиск назад. Позиция является общей для чтения и записи. Однако остальные вопросы остаются.
Нет ли способа узнать длину содержимого, которое в данный момент содержится в потоке?
Я думал, что длина даст мне то, что я ищу, но в моем тесте она не совпала.
[code]public class Solution {
public static void Main(string[] args) { var raw = new byte[] { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5 }; using (var stream = new MemoryStream(3)) { long size = stream.Length; // Actual 0, expected 0 long capacity = stream.Capacity; // Actual 3, expected 3 long position = stream.Position; // Actual 0, expected 0
stream.Write(raw, 0, raw.Length); size = stream.Length; // Actual 6, expected 6 capacity = stream.Capacity; // Actual 256, expected big enough to hold content position = stream.Position; // Actual 6, expected 6
var buffer = new byte[1]; stream.Read(buffer, 0, 1); size = stream.Length; // Actual 6, expected 5 capacity = stream.Capacity; // Actual 256, expected same as before position = stream.Position; // Actual 6, expected 5
stream.Write(raw, 0, raw.Length); size = stream.Length; // Actual 12, expected 11 capacity = stream.Capacity; // Actual 256, expected same as before position = stream.Position; // Actual 12, expected 11
stream.Seek(0, 0); size = stream.Length; // Actual 12, expected 11 position = stream.Position; // Actual 0, expected 0 } } } [/code]
Я ожидаю, что чтение уменьшит размер на 1. Судя по всему, это не так. Тогда возникает вопрос: если байт сохраняется в памяти, а длина сообщается, включая прочитанные байты, когда он удаляется из памяти? (Мы не можем накапливать вечно!) и как нам получить длину текущего контента? (общее количество записанных байт - общее количество прочитанных байт)?
Изменить: Я понял, что позиция остается в конце потока при первой записи, если вы не выполняете поиск назад. Позиция является общей для чтения и записи. Однако остальные вопросы остаются.