gpt4 book ai didi

c# - 我可以保证 Response.Filter 的 Stream.Write() 方法不会有部分字符字节吗?

转载 作者:太空宇宙 更新时间:2023-11-03 22:25:39 26 4
gpt4 key购买 nike

我正在创建一个 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[] { ' ' });

最佳答案

流不知道它们是在处理字符数据还是二进制数据。这取决于过滤器或可能会包装您的流的 StreamWriter 来决定是否一次写出整个字符。

我个人期望 StreamWriter 只写出完整的字符,但我认为我不会依赖它。我看不到任何保证这种行为的东西。

我建议你使用 System.Text.Decoder (通过调用 Encoding.GetDecoder 获得)并使用它来维持适当的状态。事实上,这正是它的设计目的:)有关更多详细信息,请参阅链接文档。

关于c# - 我可以保证 Response.Filter 的 Stream.Write() 方法不会有部分字符字节吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1530732/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com