Bugfix

作者: 小小爱笑 | 来源:发表于2018-10-23 12:52 被阅读0次
    • socket读不到 '\n', 导致无法区分用\r\n作为分割的请求头。

    为了判断\r\n,按字节逐个读取。错误的使用了BufferedReader.read方法。导致\n被过滤,不会返回。

    应该使用socket.getInputStream() 对象 InputStream.read方法。

    BufferedReader.java

    public int read() throws IOException {
           synchronized (lock) {
               ensureOpen();
               for (;;) {
                   if (nextChar >= nChars) {
                       fill();
                       if (nextChar >= nChars)
                           return -1;
                   }
                   if (skipLF) {
                       skipLF = false;
                       if (cb[nextChar] == '\n') {
                           nextChar++;
                           continue;
                       }
                   }
                   return cb[nextChar++];
               }
           }
       }
    

    • 中文乱码问题。

    使用DataInputStream.writeBytes() 写中文时乱码。

    public final void writeBytes(String s) throws IOException {
            int len = s.length();
            for (int i = 0 ; i < len ; i++) {
                out.write((byte)s.charAt(i));
            }
            incCount(len);
        }
    

    len为string的长度,对于单字节字符 string长度等于 字符串对应的字节数组长度。 中文是多子节字符,一个字符通常对应2个字节。
    可以使用String.getBytes(StandardCharsets.UTF_8) 编码后,使用 DataInputStream.write()进行写入。


    • 文件下载时,不完整。

    InputStream is = ...; 
    OutputStream os = ...; 
    byte[] buffer = new byte[1024 * 8];
    int len;
    while((len = is.read(buffer)) > 0) {
      os.write(buffer, 0, len);
    }
    os.flush();
    

    网络io时, is.read()可能返回0, 表示等待缓冲区输入,并没有结束。
    所以,判断输入流结束不能根据>0判断。

    while((len = is.read(buffer)) >= 0) {
      ...
    }
    

    • <input id='myName'/> 无法获取value

    var name = document.getElementById('myName');
    console.log(name.value);
    

    var name, 与window.name 重名,被覆盖, 导致无法获取值。

    var myName = document.getElementById('myName');
    console.log(myName.value);
    

    相关文章

      网友评论

          本文标题:Bugfix

          本文链接:https://www.haomeiwen.com/subject/nifkgftx.html