在查看我的一些套接字连接代码时,我注意到这个方法:
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/