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

时间:2013-12-15 10:44:02

标签: 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

1 个答案:

答案 0 :(得分:1)

如果你的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);