我有一个间歇性地接收数据的Java套接字连接.每次突发接收的数据字节数不同.数据可以或可以不由众所周知的字符(例如CR或LF)终止.每个数据突发的长度是可变的.
我正在尝试从每个数据突发中构建一个字符串.构建一个稍后需要解析的字符串的最快方法(速度,而不是内存)是多少?
我开始使用字节数组来存储传入的字节,然后将它们转换为每个突发的字符串,如下所示:
byte[] message = new byte[1024];
...
message[i] = //byte from socket
i++;
...
String messageStr = new String(message);
...
//parse the string here
Run Code Online (Sandbox Code Playgroud)
这样做的明显缺点是一些突发可能比1024更长.我不想随意创建一个更大的字节数组(如果我的突发更大会怎么样?).
这样做的最佳方式是什么?我应该创建一个StringBuilder对象并追加它()吗?这样我就不必将StringBuilder转换为String(因为前者有我需要的大部分方法).
再次,执行速度是我最关心的问题.
TIA.
我正在编写新的数据库连接代码,并认为我会尝试将proxool作为连接池实现者.
通常,程序员会确保每个DriverManager.getConnection(...)后跟一个connection.close().
但是在使用Proxool时,是否需要关闭?我很困惑,因为:
一个.这里的proxool文档(http://proxool.sourceforge.net/quickStart.html)显示了被调用的close(),
湾 我读到某个地方,proxool添加了关闭钩子,当程序退出时关闭所有连接.
我的程序最关心的是性能(每秒最多200个DB写入),因此我不确定Proxool的getConnection()/ close()将如何影响性能.
我的问题是:
是否需要close(),还是我可以依靠Proxool关闭我的连接?
如果我必须每次都明确地调用close(),那么这不会对性能产生负面影响吗?
提前致谢.
我是Netty的新手,我想知道当TCP客户端有时发送可变长度的二进制记录(十六进制)时,如何读取/处理传入的TCP数据,有时会发送可变长度的ASCII记录,其中没有一个是由回车符分隔的或换行.
TCP客户端正在发送字节流,如下所示:
一个二进制字节流,以'$'开头但具有不同的字节数,并且不会被任何字符终止,并且
一个ASCII字节流,以'('和''结尾'开头,但字节数不同,不会被任何字符终止
两组记录都到达同一个端口.
我如何编写基于Netty的TCP服务器来处理/读取两者?
提前致谢.
注:Kunal