【问题标题】:Java CharBuffer from socket ERROR_FORMAT来自套接字 ERROR_FORMAT 的 Java CharBuffer
【发布时间】:2016-10-27 02:59:37
【问题描述】:

Java:1.7 操作系统:Linux(但我不知道是哪个Linux)

我有一个 CharBuffer 来包含我从套接字的 BufferedReader 读取的内容。 Socket 是肯定建立的,当我尝试转储它时,它给了我一个 ERROR_FORMAT 结果。

之后,我从套接字读取数据,但导致 java.net.SocketException: Connection reset

Connection reset 问题是我要解决的问题,但是 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

【问题讨论】:

  • 数据流中的字符可能不在 BMP 上,这可能会导致问题。我建议您将原始数据放在 ByteArraryInputStream 中,而不是使用套接字,直到您找出问题所在。
  • 什么是 BMP?

标签: java sockets connection-reset charbuffer


【解决方案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());
}

2016 年 10 月 27 日下午 6:27:18 nz.test.buffers.CharBufferTest main

INFO: CharBuffer:

2016 年 10 月 27 日下午 6:27:18 nz.test.buffers.CharBufferTest main

INFO: CharBuffer all:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多