プロが教える店舗&オフィスのセキュリティ対策術

下記のソースコードで

import java.io.IOException;
import java.io.FileInputStream;

public class skip2 {
public static void main(String[] args) throws IOException {

FileInputStream fis = null;
int i=0;
char c;

try{

fis = new FileInputStream("ファイル");

fis.skip(4);

//ファイルへの読み書き///////////////////////////////////////////
while((i=fis.read())!=-1) {
/////////////////////////////////////////////////////////////////


c = (char)i;


System.out.print(c);

} }catch(Exception ex){
// if any error occurs
ex.printStackTrace();
}finally{

// releases all system resources from the streams
if(fis!=null)
fis.close();
}


}
}

123456789012345678901234567890という
データがあった場合

fis.skip(4);で
結果が
56789012345678901234567890になります。

先頭4byteをスキップさせた後に
4byte読み込んで何かしらの処理を行い
4byteスキップを繰り返したいのですが
やり方が分かりません。

理想は
出力前 123456789012345678901234567890

出力後 56783456123490

として、読み込んだ部分の処理を後で考える
 としたいのですがどなたかお手数ですがアドバイス宜しくお願い致します。

A 回答 (2件)

4バイトスキップと4バイト処理を交互に繰り返したいなら、skipメソッドではなくカウンター変数を用意してそちらで制御を行うのがよかろう。

InputStream#skip()云々ではなくアルゴリズムの問題だ。以下、できるだけskip2の構造を変えずにskip3を示す。skip2との対比のためなので、プログラムを整理しなおしてみて欲しい。

import java.io.IOException;
import java.io.FileInputStream;

public class skip3 {
public static void main(String[] args) throws IOException {

FileInputStream fis = null;
int i=0;
int counter=0;
char c;

try{

fis = new FileInputStream("ファイル");

// fis.skip(4); // 要らん

//ファイルへの読み書き///////////////////////////////////////////
while((i=fis.read())!=-1) {
/////////////////////////////////////////////////////////////////
if(counter >= 4) { // counterが0,1,2,3の時は処理しない つまりcounterが4,5,6,7の時は処理をする
c = (char)i;

System.out.print(c);
}
if(++counter >= 8) {
counter = 0;
}
} }catch(Exception ex){
// if any error occurs
ex.printStackTrace();
}finally{

// releases all system resources from the streams
if(fis!=null)
fis.close();
}


}
}
    • good
    • 0
この回答へのお礼

ソースコードの提示どうもありがとうございます。
希望通りの数値が出力でき
カウンター変数に関しては大変勉強になりました。
読み込んだbyteに関しての処理はこれから
構築していければと思っております。
どうもありがとうございました。

お礼日時:2013/09/10 08:14

「4バイトスキップ→4バイト読んで処理」


を繰り返す.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!