0

我必须从 S/W 版本、供应商等二进制文件中读取数据。我必须在 textarea 中显示输出。读取配置后,usre 可以通过串行端口发送选定的文件。我在这里写了一些代码:

InputStream is=null;
    try {
        File urt=filebrowser.getSelectedFile();
        is = new FileInputStream(urt);
        DataInputStream in = new DataInputStream(is);
        long l=urt.length();

        char[] bytes= new char[(int)l];
         int o=bytes.length;
         errlabel.setText(String.valueOf(o));
         String content;
        int offset;
   BufferedReader br = new BufferedReader(new InputStreamReader(in));
         int numRead;
        try {

         br.read(bytes, 0, 46);
         while ((content = br.readLine()) != null)   {
StringBuilder sb=new StringBuilder(content);

jTextArea1.setText(sb.toString());
errlabel.setText(""+sb.length());


}





        } catch (IOException ex) {
            Logger.getLogger(MyBoxUpdator.class.getName()).log(Level.SEVERE, null, ex);
        }


    } catch (FileNotFoundException ex) {
        Logger.getLogger(MyBoxUpdator.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
        try {
            is.close();
        } catch (IOException ex) {
            Logger.getLogger(MyBoxUpdator.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

和输出

EE��6**UT�h��}�(:�萢Ê�*:�茢���_��(RQ��N���S��h����rMQ��(_Q����9mTT��\�nE�PtP�!E�UtBߌz��z���������

可能有什么问题?

4

1 回答 1

2

您正在将字节转换为字符

所以你必须告诉使用什么编码。如果您不指定一个 InputStreamReader(它是:从输入字节流中读取字符的读取器)将使用默认值。我确定默认值不是您需要的。

尝试这个:

new InputStreamReader(in, "UTF-8"); // or whatever encoding you need

作为一般规则:在处理 char 到字节的转换时始终指示编码,反之亦然!:)

编辑

当然,我假设您的文件已将 TEXT 编码到其中。如果它像@alfasin 所说的那样是二进制的……嗯……看到垃圾是正常的。您应该读取字节并写入代表它们的字符(例如,作为每个字节的十六进制表示)。

于 2012-08-20T08:25:15.613 回答