今天在开发中遇到一个奇怪的问题,substring()方法竟然失败了!!!
public boolean insertMessage(String message) {
log.info("报文:" + message);
message = message.toUpperCase();
//截取真正报文部分
String msg = message.substring(4, message.length() - 4);
log.info(msg);
}
仔细看了一下,substring()方法的介绍,https://www.runoob.com/java/java-string-substring.html…后觉得,代码是没问题的。
通过debug模式启动后,发现我的 message.length() 的长度竟然是1024
垂死病中惊坐起
原来罪魁祸首在这里:
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
inputStream.read(bytes);
String message = new String(bytes);
此时,message的length是1024.
解决
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
int read = inputStream.read(bytes);
String message = new String(bytes, 0, read, "UTF-8");
这样,byte[]转string就只保留了byte中有效的字符元素。