Предположим, у меня есть массив байтов, который нужно преобразовать в массив символов и отправить по сети. например
char[] sometoken = String( myByteArray ).toCharArray();
myMethodToSendByteArrayUsingTCPSocket( sometoken );
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 для записи в файл для надежности? Кроме того, я считаю, что необходимо указать кодировку ASN.1 для getBytes(). Это getBytes("ASN.1") ?
Спасибо.
String( myByteArray )
должно бытьnew String( myByteArray, encoding )
. ASN.1 не является кодировкой символов. Вы не можете написатьgetBytes("ASN.1")
. Вы должны использовать библиотеку Java ASN.1. Кроме того, char[] содержит символы UTF-16BE. Это действительно то, что требует ваш проводной протокол? - person David Conrad   schedule 17.07.2014char
представляет собой произвольную последовательность кодовых единиц UTF-16. (String
— это последовательность кодовых единиц UTF-16, которые содержат допустимые кодовые точки UTF-16.) - person Tom Blodget   schedule 18.07.2014char
для двоичного кода, тогда как в C это делается постоянно (и другого варианта действительно нет). Таким образом, при чтении документа интерфейса, написанного с точки зрения C, часто используется терминология, которая по существу не имеет смысла для Java. - person Hot Licks   schedule 18.07.2014