- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要转换 char
的流进入 byte
的流中s,即我需要来自 java.io.Writer
的适配器java.io.OutputStream
的接口(interface), 支持任何有效的 Charset
我将把它作为配置参数。
然而,java.io.OutputStreamWriter
类有一个隐藏的 secret :sun.nio.cs.StreamEncoder
它委托(delegate)给下面的对象会创建一个 8192 字节 (8KB) 的缓冲区,即使您不要求它这样做也是如此。
问题是,在 OutputStream
我插入了一个包装器,它需要计算正在写入的字节数,以便在输出特定数量的字节后立即停止源系统的执行。如果OutputStreamWriter
正在创建一个 8K 缓冲区,我只是得到了生成的字节数的通知太晚了,因为它们只会在缓冲区刷新时到达我的计数器(所以已经有超过 8,000 个已经生成的字节在 OutputStreamWriter
缓冲区等着我。
所以问题是,在 Java 运行时的任何地方是否有一个 Writer
-> OutputStream
可以无缓冲运行的网桥?
我真的非常讨厌自己写这个 :(...
注意:在 OutputStreamWriter
上点击 flush() for each write 不是一个有效的选择。这会带来很大的性能损失(在 synchronized
处涉及一个 StreamEncoder
block )。
注意 2:我知道可能有必要在桥上保留一个小的字符溢出以计算代理项。这并不是说我需要在它生成第 n 个字节的那一刻停止源系统的执行(这是不可能的,因为字节可以以更大的形式出现 byte[]
在 write
称呼)。但我需要尽快停止它,等待 8K、2K 甚至 200 字节的缓冲区刷新就太晚了。
最佳答案
因为您已经检测到 OutputStreamWriter
使用的 StreamEncoder
的缓冲区大小为 8KB,并且没有更改该大小的接口(interface)。
但下面的代码片段为您提供了一种为 OutputStream
获取 Writer
的方法,该 OutputStream
在内部也使用 StreamEncoder
但现在有一个用户-定义缓冲区大小:
String charSetName = ...
CharsetEncoder encoder = Charset.forName(charSetName).newEncoder();
OutputStream out = ...
int bufferSize = ...
WritableByteChannel channel = Channels.newChannel(out);
Writer writer = Channels.newWriter(channel, encoder, bufferSize);
关于java - 是否存在不带缓冲的 OutputStreamWriter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36809823/
我的 Servlet 中有一个 OutputStreamWriter,它使用特定的编码方案,即我必须使用此构造函数 OutputStreamWriter(OutputStream out, Strin
在 Java 中,如果我使用 UTF-16 字符集创建 OutputStreamWriter,Java 是否规定默认字节顺序(UTF-16BE 或UTF-16LE),或者是默认依赖于底层操作系统。 注
这个问题在这里已经有了答案: Write to FileOutputStream from multiple threads in Java (4 个答案) 关闭 5 年前。 java.io.Out
我需要转换 char 的流进入 byte 的流中s,即我需要来自 java.io.Writer 的适配器java.io.OutputStream 的接口(interface), 支持任何有效的 Cha
我有一个通过网络服务上传照片的应用程序。过去,我将文件加载到流中,然后转换为 Base64。然后我通过 OutputStreamWriter 的 write() 方法发布了结果字符串。现在,Web 服
原始代码及其将数据保存到SD卡的工作 // Writing data to internal storage btnSaveData.setOnClickListener(new View.OnCli
transformer.transform(new DOMSource(doc),new StreamResult(new OutputStreamWriter(System.out, "UTF-8"
我想创建一个无缓冲的 OutputStreamWriter。 docs (Java 7) 说 The resulting bytes are accumulated in a buffer befor
为什么第一个示例打印字符串 12345 而第二个示例却没有? public static void main(String[] args) { ByteArrayOutputStrea
刷新要发送到网络套接字的 OutputStreamWriter 会产生哪些副作用。 我有一个程序,每隔几个字节就调用out.flush()。有什么理由让我应该等到我需要的所有字节都在缓冲区中吗? 如果
我正在尝试学习套接字编程。我使用 InputStreamReader 编写客户端,并使用 BufferedReader 读取从服务器发送的消息。对于服务器,如果我用 print 方法编写 PrintW
我正在尝试下面的代码,我的问题是我用来获取字节数组的字符 根据其字符集,char É 应对应于 144,但我在运行代码时得到的值为 -55, 如果我使用 $ 我会得到 36,这是正确的吗? 谢谢你的帮
OutputStreamWriter out = new OutputStreamWriter(sock.getOutputStream()); out.write(data); out.flush(
我有一个代码可以将请求发送到 php 页面并且它工作正常,但是突然(我不记得改变了什么)它在模拟器和真实设备上都停止工作 URL url = new URL(this.site);
这是更大的绘图程序(特别是 JavaPlot)的一部分。简而言之,我会尝试绘制一些东西;该图将出现在 out.write(comms); 但一旦它击中就关闭 out.close() 我知道您需要关闭
我在 Linux 服务器上使用 JDK 1.7。我已经安装了 apache 6.0.35 并使用代码 Writer w = new OutputStreamWriter(os,"Unicode");
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
我正在通过这样的套接字发送 ascii: outputStreamWriter(s + (char) 13); outputStreamWriter.flush(); 在我的开发环境中
在服务器端代码中,我正在使用 OutputStreamWriter 编写一个字符串(在浏览器页面上写入)。这被写在一个新窗口中。我需要能够在同一个窗口中编写它。 该类扩展了 HttpServlet,代
我不明白这两个类之间的区别。你什么时候用一个而不是一个?我知道 FileWriter 可以将字符输出到文件,但据我所知,OutputStreamWriter 也可以。这是我测试的一些代码,它们似乎工作
我是一名优秀的程序员,十分优秀!