Java 如何可靠地写入字节数组

Java 如何可靠地写入字节数组,java,asn.1,dataoutputstream,Java,Asn.1,Dataoutputstream,假设我有一个字节数组需要转换成字符数组并通过网络发送。 乙二醇 myByteArray是ASN.1编码(是kerberos TGT)。在接收端,我使用此代码将“sometoken”写入文件 try{ fileName = .....; fs = new FileOutputStream(fileName) ; fs.write( new String( sometoken ).getBytes() );

假设我有一个字节数组需要转换成字符数组并通过网络发送。 乙二醇

myByteArray是ASN.1编码(是kerberos TGT)。在接收端,我使用此代码将“sometoken”写入文件

   try{
        fileName = .....;
        fs =  new FileOutputStream(fileName)  ;
        fs.write( new String( sometoken ).getBytes() );         
        fs.flush();
        fs.close(); 
    }catch(IOException e){
        e.printStackTrace();
    }
请问,为了可靠性,我是否应该使用DataOutputStream写入文件?另外,我认为需要为getBytes()指定ASN.1编码。它是getBytes(“ASN.1”)吗


谢谢。

这在现实世界中经常发生。在浏览器中查看图像的任何时候,都会看到通过套接字发送的字节数据字符串。只需对数据进行BASE64编码,即可将字节转换为“可打印”的ASCII文本。然后传输,然后在远端反转

您可以使用“CP437”字符集来返回数据,而不会丢失数据。它有256个字符,每个字符一个字节。正如其他人指出的那样,双方必须达成一致


另一方面,byteArray确实是应该发送的。既然您要先保存到文件,只需使用。

“假设我有一个字节数组需要转换为字符数组”——这是您的第一个错误。当您将任意字节数组转换为字符串时,您已经彻底破坏了数据。@HotLicks,但我需要将char[]传递给myMethodToSendByteArrayUsingTCPSocket()方法。它只接受char[]参数。谢谢退后。您发送的数据是什么?它是从哪里来的?它看起来像什么?另一端是谁在接收数据?@HotLicks,我已经声明这是一张kerberos票据。需要将此票证发送到其他服务器,但需要首先转换为char[]。之后,我想拿回原始编码的票。Kerberos票证是使用KerberosTicket模块中的getEncoded()创建的。getEncoded()生成ASN.1编码票据。谢谢
String(myByteArray)
应该是
新字符串(myByteArray,encoding)
。ASN.1不是字符编码。无法写入
getBytes(“ASN.1”)
。您必须使用JavaASN.1库。此外,char[]中还有UTF-16BE字符。这就是wire协议所要求的吗?有几种方法可以在不使用Base64编码的情况下传输数据。如果要使用Base64方案,两端必须达成一致。您的描述不正确(您可以通过套接字发送二进制数据,而无需将其转换为字符串数据,事实上,这是首选),但是您对这个问题的回答是正确的(使用Base64编码)。
   try{
        fileName = .....;
        fs =  new FileOutputStream(fileName)  ;
        fs.write( new String( sometoken ).getBytes() );         
        fs.flush();
        fs.close(); 
    }catch(IOException e){
        e.printStackTrace();
    }