Convierta una cadena a una matriz de bytes y luego vuelva a la cadena original

¿Es posible convertir una cadena en una matriz de bytes y luego volver a convertirla en la cadena original en Java o Android?

Mi objective es enviar algunas cadenas a un microcontrolador (Arduino) y almacenarlo en EEPROM (que tiene solo 1 KB). Intenté usar un hash MD5 , pero parece que solo es un cifrado de una manera. ¿Qué puedo hacer para enfrentar este problema?

Sugeriría usar los miembros de cadena, pero con una encoding explícita :

byte[] bytes = text.getBytes("UTF-8"); String text = new String(bytes, "UTF-8"); 

Al usar una encoding explícita (y una que admite todo Unicode) evita los problemas de simplemente llamar a text.getBytes() etc:

  • Está utilizando explícitamente una encoding específica, para saber qué encoding usar más adelante, en lugar de depender de la plataforma predeterminada.
  • Usted sabe que soportará todo Unicode (en lugar de, digamos, ISO-Latin-1).

EDITAR: A pesar de que UTF-8 es la encoding predeterminada en Android, definitivamente sería explícito sobre esto. Por ejemplo, esta pregunta solo dice “en Java o Android”, por lo que es completamente posible que el código termine siendo utilizado en otras plataformas.

Básicamente, dado que la plataforma Java normal puede tener diferentes codificaciones predeterminadas, creo que es mejor ser absolutamente explícito. He visto mucha gente usando la encoding predeterminada y perdiendo datos para correr ese riesgo.

EDITAR: en mi prisa me olvidé de mencionar que no tiene que usar el nombre de la encoding; puede usar un Charset en Charset lugar. Usando guayaba realmente usaría:

 byte[] bytes = text.getBytes(Charsets.UTF_8); String text = new String(bytes, Charsets.UTF_8); 

Puedes hacerlo así.

String to byte array

 String stringToConvert = "This String is 76 characters long and will be converted to an array of bytes"; byte[] theByteArray = stringToConvert.getBytes(); 

http://www.javadb.com/convert-string-to-byte-array

Matriz de bytes a cadena

 byte[] byteArray = new byte[] {87, 79, 87, 46, 46, 46}; String value = new String(byteArray); 

http://www.javadb.com/convert-byte-array-to-string

Use [String.getBytes()][1] para convertir a bytes y use [String(byte[] data)][2] constructor para volver a convertir en string.

Mira esto, puedes usar los proyectos Base85: Base85 aka ASCII85 java

Tenía la misma pregunta.

import java.io.FileInputStream; importar java.io.ByteArrayOutputStream;

clase pública FileHashStream {// escribe un nuevo método que proporcionará una nueva matriz de bytes, y donde esto generalmente se lee desde una secuencia de entrada

 public static byte[] read(InputStream is) throws Exception { String path = /* type in the absolute path for the 'commons-codec-1.10-bin.zip' */; // must need a Byte buffer byte[] buf = new byte[1024 * 16] // we will use 16 kilobytes int len = 0; // we need a new input stream FileInputStream is = new FileInputStream(path); // use the buffer to update our "MessageDigest" instance while(true) { len = is.read(buf); if(len < 0) break; md.update(buf, 0, len); } // close the input stream is.close(); // call the "digest" method for obtaining the final hash-result byte[] ret = md.digest(); System.out.println("Length of Hash: " + ret.length); for(byte b : ret) { System.out.println(b + ", "); } String compare = "49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d"; String verification = Hex.encodeHexString(ret); System.out.println(); System.out.println("===") System.out.println(verification); System.out.println("Equals? " + verification.equals(compare)); } 

}