我正在使用Chrome的Native Messaging API以Java格式将数据传递给我的主机。数据是一个512 KB长的字符串,用Base64编码。问题是主机花了太长时间才能从标准输入中读取数据。 我阅读了以下帖子:Very Slow to pass "large" amount of data from Chrome Extension to Host (written in C#)我明白问题是我如何读取字节但是到目前为止我无法将该代码调整为java。
我的主机代码是:
try {
// hilo principal de la aplicacion
while(true){
int length = 0;
String input = "";
String output = "";
String outputType = "";
// cargamos la logitud de caracteres en bytes
byte[] bytes = new byte[4];
System.in.read(bytes, 0, 4);
length = getInt(bytes);
// cargamos los datos enviados
byte[] data = new byte[length];
System.in.read(data, 0, length);
if (length == 0){
// si no recibimos datos ponemos un sleep para no comer todos los recursos del equipo
Thread.sleep(50);
break;
}else{
// Loop getchar to pull in the message until we reach the total length provided.
for (int i=0; i < length; i++){
input += (char) data[i];
}
// leemos el texto enviado del dato en JSON
JSONObject obj = new JSONObject(input);
String texto = obj.getString("text");
System.err.write(("TEXT: " + texto).getBytes());
// creamos el mensaje de respuesta y lo enviamos
String respuesta = "{\"type\":\"TEST\", \"text\":\"" + texto + "\"}";
System.out.write(getBytes(respuesta.length()));
System.out.write(respuesta.getBytes(Charset.forName("UTF-8")));
}
}
} catch (Exception e) {
e.printStackTrace();
}
我需要帮助来调整我的主机代码在java中快速阅读消息。
答案 0 :(得分:1)
DataInputStream.readInt()
和.readFully()
完成大部分操作,并且没有错误。如果您使用的是Intel,则需要重新排列int作为本机字节顺序,因为它会读取网络字节顺序。BufferedInputStream
之间添加System.in
:这将解决主要的性能问题。new String(data,...)
解决其他性能问题,而不是附加循环。