我需要将一个流转换char为一个bytes 流,即我需要一个从java.io.Writer接口到a 的适配器java.io.OutputStream,支持任何有效的Charset,我将作为配置参数.
但是,java.io.OutputStreamWriter该类有一个隐藏的秘密:sun.nio.cs.StreamEncoder它委托给下面的对象创建一个8192字节(8KB)的缓冲区,即使你没有要求它.
问题是,OutputStream最后我插入了一个需要计算正在写入的字节数的包装器,以便在输出特定数量的字节后立即停止执行源系统.如果OutputStreamWriter正在创建一个8K缓冲区,我只是被告知生成的字节数太晚,因为它们只会在缓冲区刷新时到达我的计数器(所以已经有超过8,000个已经生成的字节在等待我OutputStreamWriter缓冲).
所以,问题是,有没有在Java运行时的任何地方Writer- > OutputStream桥可以运行无缓冲?
我真的,真的很讨厌自己写这个:( ...
注意:在每次写入时按下flush()OutputStreamWriter不是有效的替代方法.这会带来很大的性能损失(synchronized涉及到一个块StreamEncoder).
注2:我知道可能有必要在桥上保留一个小的char溢出来计算代理.这不是我需要在它生成第n个字节的那一刻停止执行源系统(这是不可能的,因为给定的字节可以byte[]在write调用中以更大的形式出现给我).但是我需要尽快停止它,等待8K,2K甚至200字节的缓冲区才能刷新,这简直太迟了.