First, let's look at an example:
byte [] b=newbyte[]{2,9,43}; string SS=New string (b, "Utf-8"); byte [] b1=ss.getbytes ();
In this case, the B and B1 byte arrays are the same.
What about the following situation?
byte [] b=newbyte[]{-2,-9,43}; string SS=New string (b, "Utf-8"); byte [] b1=ss.getbytes ();
The printed SS is a bunch of things we can't read! And we found that the B and B1 byte arrays are different lengths? Why?
We know that the ASCII encoding range is 0~127, so how does -2,-9 encode it?
The byte of B1 and B means that the data is distorted during the transfer process, so how to solve the distortion problem?
We can use Base64 to transform the value of -128~127 (please google for yourself).
You can prevent errors during transmission by making Base64 encoding decoding. Base64 can be used with COMMONS-CODEC, as shown below:
Method Summary
Methods
Modifier and Type |
Method and Description |
static byte[] |
decodeBase64(byte[] base64Data) Decodes Base64 data into octets |
static byte[] |
decodeBase64(String base64String) Decodes a Base64 String into octets |
static BigInteger |
decodeInteger(byte[] pArray) Decodes a byte64-encoded integer according to crypto standards such as the "s xml-signature |
static byte[] |
encodeBase64(byte[] binaryData) Encodes binary data using the Base64 algorithm but does not chunk the output. |
static byte[] |
encodeBase64(byte[] binaryData, boolean isChunked) Encodes binary data using the Base64 algorithm, optionally chunking the output into character blocks. |
static byte[] |
encodeBase64(byte[] binaryData, boolean isChunked, boolean urlSafe) Encodes binary data using the Base64 algorithm, optionally chunking the output into character blocks. |
static byte[] |
encodeBase64(byte[] binaryData, boolean isChunked, boolean urlSafe, int maxResultSize) Encodes binary data using the Base64 algorithm, optionally chunking the output into character blocks. |
static byte[] |
encodeBase64Chunked(byte[] binaryData) Encodes binary data using the Base64 algorithm and chunks the encoded output into character blocks |
static String |
encodeBase64String(byte[] binaryData) Encodes binary data using the Base64 algorithm but does not chunk the output. |
static byte[] |
encodeBase64URLSafe(byte[] binaryData) Encodes binary data using a url-safe variation of the Base64 algorithm but does not chunk the output. |
static String |
encodeBase64URLSafeString(byte[] binaryData) Encodes binary data using a url-safe variation of the Base64 algorithm but does not chunk the output. |
static byte[] |
encodeInteger(BigInteger bigInt) Encodes to a byte64-encoded an integer according to crypto standards such as a "s xml-signature |
static boolean |
isArrayByteBase64(byte[] arrayOctet) Deprecated. 1.5 Use isBase64(byte[]) , would be is removed in 2.0. |
static boolean |
isBase64(byte octet) Returns whether or not, in the octet base, alphabet. |
static boolean |
isBase64(byte[] arrayOctet) Tests a given byte array to see if it contains only valid characters within the Base64 alphabet. |
static boolean |
isBase64(String base64) Tests a given String to see if it contains only valid characters within the Base64 alphabet. |
protected boolean |
isInAlphabet(byte octet) Returns whether or not are in the octet Base64 alphabet. |
boolean |
isUrlSafe() Returns our current encode mode. |
Note that when the URL is transferred, use the Urlsafe method as much as possible in order to ensure that no transmission errors, such as "+", are missing.
byte [] b=newbyte[]{-2,-9,43}; byte [] s=base64.encodebytestobytes (b); byte [] B1=base64.decode (s);
Let's see what the coded s looks like.
47, 118, 99, 114
After encoding, the ASCII encoding becomes 0~127, and the value of B1 after decoding is:
-2,-9, 43
B and B1 are the same, no data distortion.
Alternatively, you can use bouncy castle support. Specifically, Google can do it.
Some small details:
1. Cross-platform transmission may be transmitted by a hexadecimal string, to be converted to a byte array and then encoded, the conversion method is: Starting from high, two hexadecimal characters for a set to byte. Examples are as follows:
String hex= "1A2BCC";
First split, "1a", "2b" "CC" Resolved to byte array 26,43,208
2. Cross-platform to consider the encoding format, such as Utf-8 or GBK or iso-8895-1.
Base64 is used in Java encryption to guarantee the integrity of non-ASCII code strings