Java CharBuffer из сокета ERROR_FORMAT
Java: 1.7 ОС: Linux (но я не знаю, что это за Linux)
У меня есть CharBuffer для хранения чего-то, что я прочитал из BufferedReader сокета. Сокет был установлен, что точно, и когда я пытаюсь сбросить его, это дает мне результат ERROR_FORMAT.
После этого я прочитал данные из сокета, но вызвал java.net.SocketException: сброс соединения
Проблема с сбросом соединения была проблемой, которую я исправляю, но почему CharBuffer.toString() дает результат ERROR_FORMAT?
Ниже мой код, что-то не так?
Socket connectionSocket=xxxxxx; //Connected socket given by other library
connectionSocket.setSoTimeout(75*1000);
CharBuffer charBuffer=CharBuffer.allocate(1024);
BufferedReader bufferedReader=null;
bufferedReader=new BufferedReader(new InputStreamReader(connectionSocket.getInputStream(), "BIG5"));
while((bufferedReader.read(charBuffer))!=-1) // in 2nd time, this line throw a java.net.SocketException: Connection reset
{
charBuffer.flip();
respStr.append(charBuffer);
log.info("CharBuffer: "+charBuffer.toString()); // this line runs just 1 tine, print result: "CharBuffer: 2016102618353211301 : ERROR_FORMAT"
charBuffer.clear();
}
log.info("CharBuffer all: "+charBuffer.toString()); // dodn't been execute
1 ответ
Я не смог повторить вашу проблему
public static void main(String[] args) throws IOException {
StringBuilder respStr = new StringBuilder();
CharBuffer charBuffer=CharBuffer.allocate(1024);
BufferedReader bufferedReader=null;
Logger log = Logger.getAnonymousLogger();
// create a byte stream with some big 5 characters in it
// to simulate what a socket should produce
byte[] bytes = new byte[100];
int index = 0;
for(int i = 0xc940;i<0xc940+50;i++){
bytes[index++] = (byte)((i & 0x0ff00)>>8);
bytes[index++] = (byte)((i & 0x0ff));
}
InputStream byteStream = new ByteArrayInputStream(bytes);
// code to process the byte stream
bufferedReader=new BufferedReader(new InputStreamReader(byteStream, "BIG5"));
while((bufferedReader.read(charBuffer))!=-1){
charBuffer.flip();
respStr.append(charBuffer);
log.info("CharBuffer: "+charBuffer.toString());
charBuffer.clear();
}
log.info("CharBuffer all: "+charBuffer.toString());
}
27 октября 2016 г. 18:27:18 nz.test.buffers.CharBufferTest main
ИНФОРМАЦИЯ: CharBuffer: <китайские иероглифы>
27 октября 2016 г. 18:27:18 nz.test.buffers.CharBufferTest main
ИНФОРМАЦИЯ: CharBuffer all: <китайские иероглифы>