如何将String数组转换为Byte数组? (Java)的

我有一个一维的String数组,我想转换成一维字节数组。 我该怎么做呢? 这需要ByteBuffer吗? 我怎样才能做到这一点? (字符串可以是任意长度,只是想知道如何进行这样的操作。在将其转换为字节数组后,我怎么能将它转换回String数组?

-担

数组到数组你应该手动转换为解析到两边,但如果你只有一个字符串你可以String.getBytes()new String(byte[] data) ; 喜欢这个

 public static void main(String[] args) { String[] strings = new String[]{"first", "second"}; System.out.println(Arrays.toString(strings)); byte[][] byteStrings = convertToBytes(strings); strings = convertToStrings(byteStrings); System.out.println(Arrays.toString(strings)); } private static String[] convertToStrings(byte[][] byteStrings) { String[] data = new String[byteStrings.length]; for (int i = 0; i < byteStrings.length; i++) { data[i] = new String(byteStrings[i], Charset.defaultCharset()); } return data; } private static byte[][] convertToBytes(String[] strings) { byte[][] data = new byte[strings.length][]; for (int i = 0; i < strings.length; i++) { String string = strings[i]; data[i] = string.getBytes(Charset.defaultCharset()); // you can chose charset } return data; } 

对于来自字符串[]的一个字节[],您必须:

  • 使用一些分隔符从每个字符串的byteArray concat字节数组
  • 从bytearray拆分te相同的分隔符并创建如上所述的String。

你没有说你想用字节做什么(除了之后将它们转换回String[] ),但假设你可以把它们当作一个不透明的数据包(所以你可以将它们保存到文件或通过网络或诸如此类方式发送它们,但您不需要以任何方式检查或修改它们,我认为您最好的选择是使用序列化。 要序列化您的字符串数组,您可以编写如下内容:

 final String[] stringArray = { "foo", "bar", "baz" }; final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); final ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(stringArray); objectOutputStream.flush(); objectOutputStream.close(); final byte[] byteArray = byteArrayOutputStream.toByteArray(); 

并在之后恢复它,你会反过来写:

 final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray); final ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream); final String[] stringArray2 = (String[]) objectInputStream.readObject(); objectInputStream.close(); 

首先声明像我在这里声明的字符串str="Suresh"
第二次使用getBytes()以字节为单位进行转换
getBytes返回byte数组。

 String str="Suresh"; byte[] s=str.getBytes(); 

String.getBytes() ? 是你在找什么。

我会将此视为序列化问题,并将其实现如下(完整且可用的Java代码):

 import java.nio.ByteBuffer; import java.util.ArrayList; public class Serialization { public static byte[] serialize(String[] strs) { ArrayList byteList = new ArrayList(); for (String str: strs) { int len = str.getBytes().length; ByteBuffer bb = ByteBuffer.allocate(4); bb.putInt(len); byte[] lenArray = bb.array(); for (byte b: lenArray) { byteList.add(b); } byte[] strArray = str.getBytes(); for (byte b: strArray) { byteList.add(b); } } byte[] result = new byte[byteList.size()]; for (int i=0; i strList = new ArrayList(); for (int i=0; i< bytes.length;) { byte[] lenArray = new byte[4]; for (int j=i; j 

我们的想法是,在生成的字节数组中,我们存储第一个字符串的长度(如果我们使用int类型,则总是4个字节),然后是第一个字符串的字节(其长度可以在后面的4个字符串中读取)字节),然后是第二个字符串的长度和第二个字符串的字节,依此类推。 这样,可以从生成的字节数组中轻松恢复字符串数组,如上面的代码所示。 这种序列化方法可以处理任何情况。

如果我们对输入字符串数组做出假设,代码可以更简单:

 public class Concatenation { public static byte[] concatenate(String[] strs) { StringBuilder sb = new StringBuilder(); for (int i=0; i 

假设输入数组的任何字符串中都不存在*.* 。 换句话说,如果您事先知道某些特殊的符号序列将不会出现在输入数组的任何字符串中,您可以将该序列用作拆分器。

你可以检查一下

 package javaapplication2; import java.util.Arrays; /** * * @author Ali */ public class JavaApplication2 { public static byte[] to_byte(String[] strs) { byte[] bytes=new byte[strs.length]; for (int i=0; i 

您可以迭代每个字符串并继续追加到最终的字节数组。

 String example = "This is an example"; //Convert String to byte[] using .getBytes() function byte[] bytes = example.getBytes(); //Convert byte[] to String using new String(byte[]) String s = new String(bytes);