- PR -

16bit数値をファイルに書き込む方法を教えてください。

1
投稿者投稿内容
しむ
会議室デビュー日: 2003/11/26
投稿数: 4
投稿日時: 2003-11-26 16:59
暗号化したデータをファイルに保存しようとしています。

######################################################################

// FileInputStreamオブジェクトの生成
FileInputStream moto = new FileInputStream("test.txt");
// InputStreamReaderオブジェクトの生成
InputStreamReader in = new InputStreamReader(moto, "Shift_JIS");

int contents;

while ((contents = in.read( )) != -1) {
}

######################################################################
上記のようにして元となるテキストファイルから1文字ずつ「contents」に読み込んでいます。
intなので16bit(-32768〜32767)までの数値を表現できると思っていました。
そこで読み込んだデータの数値をずらして(加減算して)ファイルに書き込んだのですが
値によっては3Fとして書き込まれてしまいました。

試しに以下のようにして、バイナリエディタで書き込み結果を見てみたのですが
ちゃんと書き込めている部分もあるのですが、3Fに置き換わってしまっている
部分が大半でした。
######################################################################

// FileOutputStreamオブジェクトの生成
FileOutputStream outfd = new FileOutputStream("sample.txt");
// OutputStreamWriterオブジェクトの生成
OutputStreamWriter out = new OutputStreamWriter(outfd, "Shift_JIS");

for( i=0; i<=32767 ; i++){
out.write(i);
}

######################################################################

数値の値をそのまま書き込む方法はないのでしょうか?
OutputStreamWriterオブジェクトの生成時に指定しているエンコード方式を
変えれば良いのでしょうか?
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-11-26 17:10
引用:

数値の値をそのまま書き込む方法はないのでしょうか?
OutputStreamWriterオブジェクトの生成時に指定しているエンコード方式を
変えれば良いのでしょうか?


Writerを継承したクラスはみなキャラクタ出力用ですよ。
バイナリでファイルに出力したいのでしたら、FileOutputStreamをBufferedOutputStreamでラップして使えば良いのでは?
数値なのにエンコーディングなんて関係ありませんよね?
しむ
会議室デビュー日: 2003/11/26
投稿数: 4
投稿日時: 2003-11-26 18:06
できました。
FileOutputStreamをBufferedOutputStreamに置き換えてファイル出力したところ
数値の値が3Fに化けたりせずに、そのまま書き込まれました。

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

スキルアップ/キャリアアップ(JOB@IT)