下記のソースコードで
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
として、読み込んだ部分の処理を後で考える
としたいのですがどなたかお手数ですがアドバイス宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
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();
}
}
}
ソースコードの提示どうもありがとうございます。
希望通りの数値が出力でき
カウンター変数に関しては大変勉強になりました。
読み込んだbyteに関しての処理はこれから
構築していければと思っております。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Java初心者です。csvファイルの...
-
JavamailでGmailのお気に入りフ...
-
java シンボルが見つかりません
-
URL\正規表現@java
-
JSPからパラメータを取得してサ...
-
Javaの質問です。テキストファ...
-
VBAで配列の計算
-
配列にnullを代入すると、null...
-
ループ処理の際、最後だけ","を...
-
配列をセッションに割り当てた後で
-
1~100までの数字を表示し、か...
-
Log4jで機能毎に別ファイルへ出...
-
Junitテストでvoid戻り値メッソ...
-
シャットダウンフックが呼ばれない
-
EXCEL VBA で、0から?1から?
-
テキストボックスに入力された...
-
べき乗
-
グレイコードの変換
-
C# ListBoxのインデックスの値...
-
javaで質問です。 文字列2023/2...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
yyyymmddからyyyy/mm/d...
-
equalsの逆
-
csv出力について
-
九九を横に表示する。
-
InputStream.read()でタイムア...
-
テキストファイルから空白行をよむ
-
Java int sum = 0は必要ですか?
-
javaのfor文が機能してないみた...
-
BufferedReaderでのエラー
-
Javaの質問です。テキストファ...
-
以下のJAVAプログラムでご質問...
-
Class.forNameでエラーになる
-
ソケットを使ったサーバとクラ...
-
テキストファイルにおいて任意...
-
テキストファイルの任意の文字...
-
JAVAでエラーがでる。
-
Inputstreamについて
-
ObjectInputStreamとStreamCorr...
-
Windowsでの標準入力の終了の仕方
-
[JAVA]エラーが解決できません。
おすすめ情報