首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >inputstream的Buffereader仍有损坏

inputstream的Buffereader仍有损坏
EN

Stack Overflow用户
提问于 2012-05-31 16:39:48
回答 2查看 1.1K关注 0票数 0

我们有从gps设备接收数据的java套接字连接应用程序。现在的问题是,我们有时会收到损坏的数据,并检查设备日志,一切都很好。首先,BufferedReader被使用,并被怀疑是罪魁祸首。我们搬到inpustream也还是有问题的。损坏是随机的,并且不是固定的间隔。下面是代码片段。

代码语言:javascript
复制
public void run() { 

     String completeMessage="";
     //BufferedReader readerBuffer = null; 
     InputStream is = null;    
     BufferedWriter writeBuffer = null;

     try {
         //readerBuffer = new BufferedReader(new InputStreamReader(sockConn1.getInputStream()));
         is = sockConn1.getInputStream();
         writeBuffer = new BufferedWriter(new OutputStreamWriter(sockConn1.getOutputStream()));

         int readChar=0;         

         sockConn1.setSoTimeout(120000);
         //dbConnection = connectionPool.getConnection();
         //dbConnection.setAutoCommit(false);
           int readChar
            while ((readChar=is.read()) != -1) 
             {                

                 System.out.println("Char value: "+(char)readChar) ;
                  if (readChar == '*') {
                   try {

                     //writeBuffer.write("@@\r\n\r\n");
                     //writeBuffer.flush();                 
                     //db processing
                    dbConnection.commit();
                   }
                   catch (SQLException ex){ 
                         ex.printStackTrace();
                            try{    
                            dbConnection.rollback();  
                            } 
                            catch (Exception rollback){    
                                rollback.printStackTrace();
                            }
                  }
                  catch (Exception e){
                        e.printStackTrace(System.out);
                            try{    
                            dbConnection.rollback();  
                            } 
                            catch (Exception rollback){    
                                rollback.printStackTrace(System.out);
                            }
                  }
                  finally{
                        try{
                            if ( dbStmt != null ){
                              dbStmt.close();
                            }                           
                        }
                        catch(SQLException ex){
                            ex.printStackTrace(System.out);
                        }                      
                      }      
                completeMessage="";           
                }

             }
          }
          catch (SocketTimeoutException ex){ 
               ex.printStackTrace();
          }  
          catch (IOException ex){ 
               ex.printStackTrace();
          }  
          catch (Exception ex){ 
               ex.printStackTrace();
          }      
          finally{
            try{
                if ( dbConnection != null ){
                  dbConnection.close();
                }
            }
            catch(SQLException ex){
                 ex.printStackTrace();
            }
            try{
                if ( writeBuffer != null ){
                    writeBuffer.close();
                }
            }
            catch(IOException ex){
               ex.printStackTrace(System.out);
            }           
          }

      }
EN

回答 2

Stack Overflow用户

发布于 2012-05-31 16:51:17

这是一个问题。将二进制数据作为文本进行读/写:

  • InputStream,OutputStream = binary data
  • 读取器,写入器= text

这是通过以下方式连接起来的:

  • 新InputStremReader(inputStream,charEncoding)
  • new OutputStreamWriter(outputStream,charEncoding)

字符串与字节之间的桥接方式为:

字节新字符串(bytes,charEncoding)

  • string.getBygtes(charEncoding)

其中charEncoding为可选参数,默认为操作系统编码。

使用UTF-8,Unicode多字节编码,如果做错了,你很快就会陷入麻烦。另外,其他编码也有问题字节。

所以不要使用Reader/Writer。

read()提供了一个int,-1表示文件结束,否则是一个字节值。您的read()测试似乎抛出了一个字节,并且后续的read没有测试-1。

票数 1
EN

Stack Overflow用户

发布于 2012-05-31 17:26:39

目前还不清楚这里使用的是什么字符编码。

当您处理字符流时,显式地提供字符编码来对字节流进行en-/解码几乎总是一个好主意。

在我看来,这很可能是一个字符编码问题。在两端使用相同的编码,使用Reader/Writer就不会有问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10830116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档