Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法字符串到字节_Java_String_Byte - Fatal编程技术网

Java 方法字符串到字节

Java 方法字符串到字节,java,string,byte,Java,String,Byte,我花了一整天的时间试图找到答案,所以最后我写在这里。 我用crypto类加密一个字符串,得到一个字节[]。 我必须用tostring()将这个字节转换成字符串,才能上传到一个web中。 我需要得到这个字符串,解密并得到原始字符串。 我的问题是关于getBytes,它不会返回相同的字节[]进行解密 我需要将原始字符串转换为字节[],加密,获取返回的字节[],转换为字符串,然后将该字符串转换为字节[],并加密相同的字节[] 我尽我所能。 我需要一个方法,使用一个字符串,总是返回相同的字节[],而ge

我花了一整天的时间试图找到答案,所以最后我写在这里。 我用crypto类加密一个字符串,得到一个字节[]。 我必须用tostring()将这个字节转换成字符串,才能上传到一个web中。 我需要得到这个字符串,解密并得到原始字符串。 我的问题是关于getBytes,它不会返回相同的字节[]进行解密

我需要将原始字符串转换为字节[],加密,获取返回的字节[],转换为字符串,然后将该字符串转换为字节[],并加密相同的字节[]

我尽我所能。 我需要一个方法,使用一个字符串,总是返回相同的字节[],而getbytes不这样做

我加上一个例子:

      String s2="this is an example";
      byte[] b1=s2.getBytes("UTF-8");
      byte[] b2=s2.getBytes("UTF-8");
      System.out.println("Byte s:"+b1);
      System.out.println("Byte s:"+b2);
有一种方法从一个字符串中得到相同的字节[]? 使用getBytes(至少是我)可以获得两个不同的字节[]。 谢谢。

您需要使用接受特定字符编码的

byte[] bytes = string.getBytes("UTF-8");
// ...
然后,要重建字符串,需要使用构造函数,该构造函数采用特定的字符编码

String string = new String(bytes, "UTF-8");
// ...
否则,将使用平台默认字符编码将字符串的字符解码为字节。并非所有平台上的平台默认字符编码都必须相同。例如,一个平台可以使用UTF-8,而另一个平台使用CP1252或ISO-8859-1

或者,您可以使用将字节编码/解码为US-ASCII兼容字符串,以便它与世界上已知的几乎每种像样的字符编码都兼容。

您需要使用哪种字符编码

byte[] bytes = string.getBytes("UTF-8");
// ...
然后,要重建字符串,需要使用构造函数,该构造函数采用特定的字符编码

String string = new String(bytes, "UTF-8");
// ...
否则,将使用平台默认字符编码将字符串的字符解码为字节。并非所有平台上的平台默认字符编码都必须相同。例如,一个平台可以使用UTF-8,而另一个平台使用CP1252或ISO-8859-1

或者,您可以使用将字节编码/解码为US-ASCII兼容字符串,以便它与世界上已知的几乎所有像样的字符编码兼容

我必须用tostring()将这个字节转换成字符串,才能上传到一个web中

不,你没有。你可以上传字节,事实上字节是你唯一可以通过HTTP发送的东西。在某个时刻,字符串将被转换回字节,那么为什么不跳过那些只会损坏数据的额外转换呢

我必须用tostring()将这个字节转换成字符串,才能上传到一个web中


不,你没有。你可以上传字节,事实上字节是你唯一可以通过HTTP发送的东西。在某个时刻,字符串将被转换回字节,因此为什么不跳过那些只会损坏数据的额外转换呢?

您是否尝试过重新创建字符串并通过明确指定编码从中获取字节

final String newString = new String(bytes, utf8_charset);
final byte[] bytes = oldString.getBytes(utf8_charset);

您是否尝试过通过显式指定编码来重新创建字符串并从中获取字节

final String newString = new String(bytes, utf8_charset);
final byte[] bytes = oldString.getBytes(utf8_charset);

出现此问题的原因可能是JDK无法正确识别字符集。 使用声明:

public byte[] getBytes(String charsetName)

指定要使用的字符集。这可能会有所帮助。我看不出它返回不同字节数组的其他原因。

问题可能是因为JDK无法正确识别字符集。 使用声明:

public byte[] getBytes(String charsetName)

指定要使用的字符集。这可能会有所帮助。我看不出它返回不同字节数组的其他原因。

是否可以省略对字符串的转换?我的意思是,你可以发送字节[],然后接收字节[]。或者您可以使用base64对字节[]进行编码(它产生一系列可打印字符),将其作为字符串发送,然后从base64解码回来并获得原始字节[]。

是否可以省略对字符串的转换?我的意思是,你可以发送字节[],然后接收字节[]。或者,您可以使用base64(它产生一系列可打印字符)对字节[]进行编码,将其作为字符串发送,然后将其从base64解码回来,获得原始字节[]。

您误解了下面这行内容

System.out.println("Byte s:"+b1);
这里我们隐式调用字节数组上的
toString()
方法。这不会返回数组的内容。而是使用:

System.out.println("Byte s:" + java.util.Arrays.toString(b1));
这将显示可用于比较的字节数组的内容

您可以使用
String.getBytes(String)
方法。它返回两个不同的字节数组实例,但都具有相同的内容

@Test
public void testGetBytes() throws Exception {
    String s2 = "this is an example";

    byte[] b1 = s2.getBytes("UTF-8");
    byte[] b2 = s2.getBytes("UTF-8");

    Assert.assertEquals(b1, b2);
}

你误解了下面这句话

System.out.println("Byte s:"+b1);
这里我们隐式调用字节数组上的
toString()
方法。这不会返回数组的内容。而是使用:

System.out.println("Byte s:" + java.util.Arrays.toString(b1));
这将显示可用于比较的字节数组的内容

您可以使用
String.getBytes(String)
方法。它返回两个不同的字节数组实例,但都具有相同的内容

@Test
public void testGetBytes() throws Exception {
    String s2 = "this is an example";

    byte[] b1 = s2.getBytes("UTF-8");
    byte[] b2 = s2.getBytes("UTF-8");

    Assert.assertEquals(b1, b2);
}

对不起,你的问题很难理解,可能是因为英语不是你的母语。你能发布一些代码来显示你在做什么,你得到的不是你想要的吗?当从字节[]到字符串进行解码时,你使用的是什么字符集?当从字符串到字节[]进行编码时,你使用的是什么字符集?两个字符必须使用相同的字符集,否则可能无法获取原始字节[]。抱歉,这不是我的母语。我贴了一个关于我的问题的例子。如果我这样写:String s=“这是一个示例”;字节[]b1=s.getBytes(“UTF-8”);字节[]b2=s.getBytes(“UTF-8”);System.out.println(“字节s:+b1”);System.out.println(“字节s:+b2”);我得到两个不同的字节。对于一个字符串,我需要得到一个字节[],一个对称关系byte[]-->String-->byte[],两个字节都相等。我试过了