Я создаю реализацию System.IO.Stream
с целью установки фильтра для HttpContext.Response.Filter
. Я хотел бы знать, будут ли все вызовы Write(byte[], int, int)
гарантировать, что записанные байты содержат целые символьные последовательности байтов или если возможно, что один символ (в случае кодировки utf-32) может быть разделен между вызовами.
public override void Write(byte[] buffer, int offset, int count) {
// Here `e' is a reference to `ctx.Response.ContentEncoding'
// from the original context.
char[] chars = e.GetChars(buffer, offset, count);
//... Stream processing logic here.
}
Мое текущее тестирование с использованием utf-32 показало, что вызовы, кажется, всегда содержат только целые последовательности символов, но я хотел получить подтверждение, прежде чем подтвердил свое предположение.
Если существует вероятность того, что записываемые байты могут быть разделены между вызовами Write
, каков наилучший подход для решения этой проблемы? Я думал о том, чтобы выполнить такую же проверку ширины одного байта в моем конструкторе и использовать ее, чтобы посмотреть, делится ли массив байтов на это значение. Однако это, естественно, нежелательно, хотя и довольно тривиально для реализации.
// Here `e' is a reference to `ctx.Response.ContentEncoding'
// from the original context.
// `charLen' will yield 4 for a utf-32 encoding.
charLen = e.GetByteCount(new char[] { ' ' });