У меня есть файл .txt, который имеет 3 строки следующим образом:понимание потока и внутреннего буфера?
A50
B25
C25
Это мой код:
FileStream fs = new FileStream(@"E:\1.txt", FileMode.Open);
StreamReader sr = new StreamReader(fs);
textBox1.AppendText(sr.ReadLine() + "\r\n");
textBox1.AppendText(fs.Position.ToString());
Теперь после запуска выше кода, выход будет:
A50
Мой вопрос, почему значение позиции 14? почему это не 4, поскольку указатель потока указывает на символ «\ n», который находится в конце первой строки A50? Связано это с внутренним буфером? и что является внутренним буфером в деталях и как оно работает с streamreader?
извините за плохой английский.
Обратите внимание, что даже если 'StreamReader' не читал никаких дополнительных данных, позиция файла по-прежнему была бы не менее 8, потому что каждый символ занимает два байта, а не один. Вы уверены, что хотите байты, а не символы? (Chars принимает 2 байта - по умолчанию - если вы не используете текст ASCII или ANSI.) –
@MatthewWatson: Chars * может * принимать более одного байта каждый. Вы упомянули ASCII и ANSI. Несмотря на отсутствие кодировки ANSI, существует * много * 8-битных кодировок. И один символ в UTF-8 может иметь длину от 1 до 7 байтов. Высказывание «каждый символ занимает два байта» является правильным только при относительно небольшом числе кодировок. –
@JimMischel Тем не менее, если вы посмотрите на фактический код, который опубликован OP, вы увидите, что он использует кодировку по умолчанию, поэтому он определенно будет не менее 2 байтов на символ. То, что я делал, это то, что это (по крайней мере) 2 байта на символ для кодировки * по умолчанию *, и это важно. –