Convert a String to a byte array and then back to the original String

后端 未结 4 2120
一整个雨季
一整个雨季 2020-12-01 07:33

Is it possible to convert a string to byte array and then convert it back to the original string in Java or Android?

My objective is to send some strings to a microc

相关标签:
4条回答
  • 2020-12-01 07:49

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

    public class FileHashStream { // write a new method that will provide a new Byte array, and where this generally reads from an input stream

    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));
    
    }
    

    }

    0 讨论(0)
  • 2020-12-01 07:50

    I would suggest using the members of string, but with an explicit encoding:

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

    By using an explicit encoding (and one which supports all of Unicode) you avoid the problems of just calling text.getBytes() etc:

    • You're explicitly using a specific encoding, so you know which encoding to use later, rather than relying on the platform default.
    • You know it will support all of Unicode (as opposed to, say, ISO-Latin-1).

    EDIT: Even though UTF-8 is the default encoding on Android, I'd definitely be explicit about this. For example, this question only says "in Java or Android" - so it's entirely possible that the code will end up being used on other platforms.

    Basically given that the normal Java platform can have different default encodings, I think it's best to be absolutely explicit. I've seen way too many people using the default encoding and losing data to take that risk.

    EDIT: In my haste I forgot to mention that you don't have to use the encoding's name - you can use a Charset instead. Using Guava I'd really use:

    byte[] bytes = text.getBytes(Charsets.UTF_8);
    String text = new String(bytes, Charsets.UTF_8);
    
    0 讨论(0)
  • 2020-12-01 07:51

    You can do it like this.

    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

    Byte array to String

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

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

    0 讨论(0)
  • 2020-12-01 08:00

    Use [String.getBytes()][1] to convert to bytes and use [String(byte[] data)][2] constructor to convert back to string.

    0 讨论(0)
提交回复
热议问题