0

S / Wバージョン、ベンダーなどのバイナリファイルからデータを読み取る必要があります。出力をテキストエリアに表示する必要があります。構成を読み取った後、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

バイトを文字に変換しています

したがって、使用するエンコーディングを指定する必要があります。1つを指定しない場合、InputStreamReader(つまり、バイトの入力ストリームから文字を読み取るリーダー)はデフォルトを使用します。デフォルトはあなたが必要とするものではないと確信しています。

これを試して:

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

原則として、文字からバイトへの変換およびその逆を処理するときは、常にエンコードを示してください。:)

編集

もちろん、ファイルにはTEXTがエンコードされていると思います。@alfasinが言ったように、それがバイナリの場合...まあ...ゴミを見るのは普通です。バイトを読み取り、それらを表す文字を書き込む必要があります(たとえば、各バイトの16進表現として)。

于 2012-08-20T08:25:15.613 に答える