java - 如何将 CR 和 LF 附加到 String.getBytes() 返回的数组

标签 java arrays io byte outputstream

在查看我的一些套接字连接代码时,我注意到这个方法:

public void write(String line) throws IOException, NullPointerException {
    log.fine(line);
    byte[] bytes = line.getBytes();
    outputStream.write(bytes);   // append 13 and 10 here before the write
    outputStream.write(13);
    outputStream.write(10);
    outputStream.flush();

}

我可能会引入一些延迟,也许是通过在刷新之前写入该行然后附加 CR 和 LF 来实现的。

将 CR 和 LF 附加到字节数组中,只需要一次调用 outputStream.write() 而不是三次调用,是否会更有效?

上下文是基于套接字连接的MUD client 。 (不,SSH 不是一个选项,MUD 游戏使用 telnet。)

因为它不是一个ArrayList或易于使用的东西,我不确定数组有多大,所以我不知道最后一个元素的索引。将 Array 迭代为一个新数组,然后然后将 CR 和 LF 附加到下一个元素?这看起来很奇怪。我不确定在添加到数组末尾时如何避免 NullPointerException

最佳答案

如果您的outputStream 对象在某一级别上是BufferedOutputStream,那么您就可以了。完全不用担心。但是,我认为,即使您没有 BufferedOutputStream,套接字流也始终会被缓冲。

要回答你的问题,你可以这样做:

byte[] msg = line.getBytes(Charset.forName("UTF-8"));
byte[] output = new byte[msg.length + 2];
System.arraycopy(msg, 0, output, 0, msg.length);
output[msg.length] = (byte) 13;
output[msg.length] = (byte) 10;
outputStream.write(output);

或者更好的是:

byte[] msg = line.concat("\r\n").getBytes(Charset.forName("UTF-8"));
outputStream.write(msg);

关于java - 如何将 CR 和 LF 附加到 String.getBytes() 返回的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20593621/

相关文章:

PHP 扫描目录和数组

python - IO错误 : [Errno 0] Error in Python

java - Spring MVC : Show data in a dialog after making an AJAX call

相当于 microtime 的 Java

javascript - 数组连接与字符串连接

c++ - 如何在C++中以非常高的速度读写数据?

c++ - 输入错误: split part of one entery

java - 出现 OutOfMemoryError 后,Spring REST 服务不会关闭

java - activepivot 支持分发吗?

arrays - Swift - 从文件读取/写入数组数组