2012-04-01 34 views
1

I/Oでの作業についてはわかりません。ファイルから(ビット単位で)読み込み、再度ファイルに書き込む

は、私は、ファイルからの読み取りにこのコードを使用しています:

symbol = -78 - ᄇ - 65458 
symbol = 52 - 4 - 52 
symbol = -91 - ᆬ - 65445 
symbol = 80 - P - 80 
symbol = -118 - ハ - 65418 
symbol = 76 - L - 76 
symbol = 122 - z - 122 
symbol = 78 - N - 78 
symbol = 112 - p - 112 
symbol = 97 - a - 97 
symbol = 56 - 8 - 56 
symbol = -112 - ミ - 65424 
:私はTXTファイル、その後、すべてがいいですが、私は、例えば、画像のためのtxtをない読んだとき、私は同様の結果を得るために読ん

if (file.length() > Integer.MAX_VALUE) { 
    throw new IllegalArgumentException("File is too large: " + file.length()); 
} 

int len = (int) file.length(); 
System.out.println("failo dydis yra = "+len); 
FileInputStream inputStream = new FileInputStream(file); 

try { 
    byte[] fileBits = new byte[len]; 
    for (int pos = 0; pos < len;) { 
     int n = inputStream.read(fileBits, pos, len - pos); 

     if (n < 0) { 
      throw new EOFException(); 
     } 
     pos += n; 

    } 
    for(int q=0; q<len; q++){ 
     char ch = (char)fileBits[q]; 
     int sk = (int)ch; 
     System.out.println("symbol = "+fileBits[q]+" - "+ch+" - "+sk); 
    } 

なぜマイナスがあるのか​​わかりません。そして、なぜ私は戻って私はこの65 ***を取得する変換したい。

多分私はこれらのバイトを文字に変換して、それらと一緒に作業し、再びファイルに書き込もうとすると、別のものを読む必要があります。

ありがとうございました。

+0

代わりにInputStreamReaderでラップしてみてください。これは文字を正しく処理します – Optimist

答えて

2

なぜマイナスがあるのか​​わかりません。

Javaの場合a byte can have values between -128 and 127。したがって、負の値が表示されています。あなたは、0と256

の間の整数値にそれを変換するために0xff & fileBits[q]を使用して、私は戻って変換したいとき、私はこの65 ***

がcharにバイトを変換し得る理由であることができますバイトがASCII互換のエンコーディングでASCII文字列の一部になっていない限り意味がありません。 Javaはバイトの最初のビットを16ビットの値に拡張します。第1のビットが設定された場合(すなわち、その数が負である場合)、結果は高い16ビット数、典型的には65xxxの形式である。

すべて正常に動作しています。画像処理/表示機能にバイトを渡すだけです。ファイルを読み込んでいる間にファイルサイズが変更されると、不必要に機能しなくなるため、関数のエラーが起こりやすいことに注意してください。文字列を読み取る場合は、Readerオブジェクトを使用します(例:InputStreamReader)。

+0

私はcharsで作業する必要がある場合、私は何をすべきですか? 変換できる方法はありますか? – Streetboy

+0

はい、「リーダー」を使用してください。答えを更新しました。 – phihag

+0

これを使用すると、どうすれば再びバイトに変換できますか: 0xf&fileBits [q] – Streetboy

関連する問題