从c#到Java错误接收字符串

从c#到Java错误接收字符串,c#,java,C#,Java,我想把字符串从C#发送到Jave 我用C#在2面这样做 发件人:C# 接收器C# 我在Java中做了一些没有运气的编码。。。。像这样 byte b = is.readByte(); byte[] buff= new byte[8]; is.read(buff,0,10); 我获得内增益[50,50,50,50,50,50,50,50,50]; ..那么如何在java中将其更改为字符串。。。。。 任何帮助都会很好…谢谢50是字符“2”的数字ASCII值。只需获取buff的每个元素,并对其应用字符

我想把字符串从C#发送到Jave 我用C#在2面这样做

发件人:C#

接收器C#

我在Java中做了一些没有运气的编码。。。。像这样

byte b = is.readByte();
byte[] buff= new byte[8];
is.read(buff,0,10);
我获得内增益[50,50,50,50,50,50,50,50,50]; ..那么如何在java中将其更改为字符串。。。。。
任何帮助都会很好…谢谢

50是字符“2”的数字ASCII值。只需获取
buff
的每个元素,并对其应用字符转换:
(char)buff[0]
(char)buff[1]
等。

50是字符“2”的数字ASCII值。只需获取
buff
的每个元素,并对其应用字符强制转换:
(char)buff[0]
(char)buff[1]
等。

字符串有一个字节contsructor。 只需使用:

String myNewString = String(buff);
字节中的字符串有几个构造函数,如果您没有任何偏移量或长度问题,那么就使用上面的构造函数。如果角色集开始出现问题,可以使用以下方法:

String myNewString = null;
try {
    myNewString = String(buff , "UTF-8") 
} catch (java.io.UnsupportedEncodingException uee) {
    //Using an unknown charset will get you here.
    uee.printStackTrace();
}

字符串具有字节的contsructor。 只需使用:

String myNewString = String(buff);
字节中的字符串有几个构造函数,如果您没有任何偏移量或长度问题,那么就使用上面的构造函数。如果角色集开始出现问题,可以使用以下方法:

String myNewString = null;
try {
    myNewString = String(buff , "UTF-8") 
} catch (java.io.UnsupportedEncodingException uee) {
    //Using an unknown charset will get you here.
    uee.printStackTrace();
}

您应该指定字符串的编码!如果c#-程序在另一台机器上运行,而不是在java应用程序上运行,则可能会出现问题。网站的java文档中说:

通过使用平台的默认字符集对指定的字节数组进行解码来构造新字符串

假设您指定了utf-8字符串编码。您还应确保c#也在发送utf-8字符串:

byte[] utf8Bytes = System.Text.Encoding.UTF8.GetBytes(myString);
在java端,您应该以utf-8字符串的形式读取字节,如下所示:

String str = new String(buff, "UTF-8");

您应该指定字符串的编码!如果c#-程序在另一台机器上运行,而不是在java应用程序上运行,则可能会出现问题。网站的java文档中说:

通过使用平台的默认字符集对指定的字节数组进行解码来构造新字符串

假设您指定了utf-8字符串编码。您还应确保c#也在发送utf-8字符串:

byte[] utf8Bytes = System.Text.Encoding.UTF8.GetBytes(myString);
在java端,您应该以utf-8字符串的形式读取字节,如下所示:

String str = new String(buff, "UTF-8");

50是“2”的ASCII码-您只需将数值转换为其ASCII表示形式即可。50是“2”的ASCII码-您只需将数值转换为其ASCII表示形式即可。@Anas ZO KO-您的思路完全正确。要通过C#和Java之间的套接字发送字符串,应该在两侧使用字节缓冲区来发送和接收。然后,正如GavinCattell所说,您需要做的就是将byte[]buffer转换为具有正确“string()”构造函数的字符串。瞧,这很简单:)PS:如果你想把字符串从Java发送到C#,你会做几乎完全相同的事情。@Anas ZO KO-你的思路绝对正确。要通过C#和Java之间的套接字发送字符串,应该在两侧使用字节缓冲区来发送和接收。然后,正如GavinCattell所说,您需要做的就是将byte[]buffer转换为具有正确“string()”构造函数的字符串。瞧,这很简单:)PS:如果你想将字符串从Java发送到C#,你会做几乎完全相同的事情。但是如果你能避免的话,你最不想做的事情就是逐字节读取输入。一次读取所有数据的最小子集,然后进行转换和处理。一次做同样多的I/O是一个巨大的性能胜利。另外:正如Thomas所建议的,您可能还需要指定编码类型。例如,C#和Java都默认为UTF-16。但是JavaUTF-16是大端,而C#UTF-16是小端(完全不同!):我实际上认为thomas的答案是最好的。说起来很奇怪,但是。。。我有点震惊你接受了我的答案…但如果你能避免的话,你最不想做的就是逐字节读取输入。一次读取所有数据的最小子集,然后进行转换和处理。一次做同样多的I/O是一个巨大的性能胜利。另外:正如Thomas所建议的,您可能还需要指定编码类型。例如,C#和Java都默认为UTF-16。但是JavaUTF-16是大端,而C#UTF-16是小端(完全不同!):我实际上认为thomas的答案是最好的。说起来很奇怪,但是。。。我有点震惊你接受了我的回答。。。