我正在使用一个只将消息作为字节的队列服务,因此我需要将数据快速转换为格式,然后在从队列接收工作时将其恢复为原始格式。我的数据格式是INT,DOUBLE和INT [],这是我最初的做法
//to convert to string
String[] message = { Integer.toString(number), String.valueOf(double), Arrays.toString(my_list) };
message.asString;
//to convert back
String message_without_brackets = message.replace("[", "" ).replace("]", "");
String[] temp_message = message_without_brackets.split(",");
int interger = Integer.valueOf(temp_message[0]);
double double = Double.valueOf(temp_message[1]);
int[] my_list = new int[temp_message.length-2]; //-2 because the first two entries are other data
for (int i = 2; i < temp_message.length; i++) {
my_list[i-2] = Integer.parseInt(temp_message[i].replace(" ",""));
}
这是非常丑陋的,让我感到恼火的是,经过几周(或一夜的大量饮酒),我可能无法迅速解决这个问题。性能方面,代码并不算太糟糕,我认为replace
是代码中最重的部分(如果我记得它只占整体执行的15%)。
我四处询问并发现Gson能够做到更清洁,但现在性能已经超过了我的循环的40%(它的Gson本身就是这样做的):
Gson gson = new Gson();
int[] sub = { 0, 59, 16 };
Object[] values = { 0, 43.0, sub };
String output = gson.toJson(values); // => [0, 43.0,[0,59,16]]
Object[] deserialized = gson.fromJson(output, Object[].class);
System.out.println(deserialized[0]);
System.out.println(deserialized[1]);
System.out.println(deserialized[2]);
所以我想知道是否有更快的方法来获得相同的结果?我正在尝试这个question中的一些建议但是有一种更快的方法来做到这一点,而不依赖于任何外部库我的需求很简单(如果没有,那么有一个快速的)?因为有人建议Gson,我看了Json解析器,但这是我应该寻找的还是有其他类型的库来做这个?
编辑:我正在将其转换为字符串,因为我认为我需要这样做才能将其发送为getBytes()
,是否还有其他格式可以更快地使用getBytes()
?< / p>
答案 0 :(得分:3)
您可以使用DataOutputStream,例如
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
int i = 0;
double d = 43.0;
int[] sub = { 0, 59, 16 };
dos.writeInt(i);
dos.writeDouble(d);
dos.write(sub.length);
for (int j : sub)
dos.writeInt(j);
byte[] bytes = baos.toByteArray();
如果您想要更加极端,可以使用循环使用的ByteBuffers甚至直接使用ByteBuffers并使用本机字节排序。等
答案 1 :(得分:1)
你看过番石榴了吗?我一直用它来处理字节流
只为toByteArray()
这个库是值得的