※ ChatGPTを利用し、要約された質問です(原文:固定長データのbyteスキップについて)
固定長データのbyteスキップについて
このQ&Aのポイント
バイナリ入出力で固定長データのbyteスキップする方法について教えてください。
例のように先頭に5byte付与されたデータをスキップして10byteずつ読み込む方法を教えてください。
Javaを使用してバイナリデータの読み書きを行っており、固定長データのbyteスキップについて困っています。どうすれば良いでしょうか?
バイナリ入出力でご質問がございます。
下記の例のように各レコードにある
先頭5byte付与されたデータを
スキップ(破棄)して
各レコード10byteずつ読み込みたいのですが
なにかサンプルデータもしくは
アドバイス頂けないでしょうか?
どうぞよろしくお願い致します。
例 1レコード 10byte (先頭5byte付与)
LLLLL1234567890
LLLLL1234567890
LLLLL1234567890
LLLLL1234567890
LLLLL1234567890
↓
1234567890
1234567890
1234567890
1234567890
1234567890
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.io.ByteArrayOutputStream;
public class dat{
public static void main(String[] args) {
String inputFileName = "";
String outputFileName = "";
// ファイルオブジェクトの生成
File inputFile = new File(inputFileName);
File outputFile = new File(outputFileName);
try {
FileInputStream fis = new FileInputStream(inputFile);
BufferedInputStream bis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream(outputFile);
BufferedOutputStream bos = new BufferedOutputStream(fos);
byte[] buf = new byte[17];
int len = 0;
while ((len = bis.read(buf, 0, 17)) == 17) {
bos.write(buf, 0, 17);
}
bos.flush();
bos.close();
bis.close();
} catch(Exception e) {
e.printStackTrace();
}
}
お礼
すいません。 質問を少し変更させて頂きますが 1レコードずつではなく 1レコードごとに10byteあったとします。 レングススキップ設定を495byteと設定したとします。 500byteごとに頭の付与された5byteをスキップさせたいのですが なにかサンプル及びアドバイス頂けますでしょうか? (1)まずはレコード先端の5byteをスキップ (2)次は495byteを超えた時点で5byteスキップとなります。 質問の変更して申し訳ございませんが 宜しくお願い致します。
補足
アドバイスありがとうございます。 下記は15レコードに対して 語尾に付加されるOD0Aの 2byte分含めて17にしてますが byte配列に変換というのは 下記のようにして 5~14を取り出すという事でしょうか? byte[] rn ="\r\n".getBytes(); byte[] out=new byte[17] ; out[0] = inbuf[0] ; out[1] = inbuf[1] ; out[2] = inbuf[2] ; out[3] = inbuf[3] ; out[4] = inbuf[4] ; out[5] = inbuf[5] ; out[6] = inbuf[6] ; out[7] = inbuf[7] ; out[8] = inbuf[8] ; out[9] = inbuf[9] ; out[10] = inbuf[10] ; out[11] = inbuf[11] ; out[12] = inbuf[12] ; out[13] = inbuf[13] ; out[14] = inbuf[14] ; out[15] = inbuf[15] ; out[16] = inbuf[16] ; bos.write(out[5]); bos.write(out[6]); bos.write(out[7]); bos.write(out[8]); bos.write(out[9]); bos.write(out[10]); bos.write(out[11]); bos.write(out[12]); bos.write(out[13]); bos.write(out[14]); bos.write(rn); } こういう方法でしたら結果は得られたのですが バイト数が多い時に もっと簡素化できるといいのですが・・・