Estoy tratando de leer un stdin de una aplicación WebExtentions. La documentación dice:
Cada mensaje se serializa mediante JSON, codificación UTF-8 y va precedido de un valor de 32 bits que contiene la longitud del mensaje en el orden de bytes nativo.
https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Native_messaging
Tienen un ejemplo en Python para leer el mensaje enviado:
rawLength = sys.stdin.read(4) if len(rawLength) == 0: sys.exit(0) messageLength = struct.unpack('@I', rawLength)[0] message = sys.stdin.read(messageLength) return json.loads(message)Entonces elimina el número de 32 bits del mensaje y luego recibe el mensaje. ¿Cómo puedo hacer lo mismo en Java?
Editar alguien me pidió que intentara una traducción. Tenga en cuenta que sé poco.
System.in.skip(4); // 4 bytes is 32 bits Scanner sc = new Scanner(System.in); String message = sc.next();Y no elimina los 4 cuatro bytes del mensaje. Mi única otra solución es encontrar el último símbolo { en el mensaje (ya que es un objeto JSON con solo una clave: par de valores) y tomar la subcadena después de eso.
Para leer los primeros 4 bytes del estándar como un int de 32 bits, haga lo siguiente:
DataInputStream data = new DataInputStream(System.in); int length = data.readInt();