gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:42:37 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com