(パッケージ化直前のファイル)
import java.util.Scanner; import java.io.FileInputStream; import java.io.FileOutputStream; public class Record2 { public static String HIGH_VALUE = "Z99"; // 存在しないデータで、商品コードはこの文字列より小さいコードとする public String sho; // 商品コード public short suu; // 数量 //n番目表示としてオペレータ用で画面表示する public void display(int n) { System.out.printf("%4d番目レコード\n", n); System.out.printf("\t商品コード:%s\n", sho); System.out.printf("\t数量:%d\n", suu); } //商品コードと数量を引数で設定するメソッド public void init(String shoCode, int n) { sho = shoCode; suu = (short)n; } //引数ありコンストラクタ public Record2(String sho, int n){ init(sho, n); } //引数なしコンストラクタ public Record2(){ } //商品コードと数量をキー入力 public void init(Scanner stdin) { System.out.print(" 商品コード>>"); sho = stdin.nextLine(); System.out.print(" 数量>>"); String s = stdin.nextLine(); suu = (short)Integer.parseInt(s); } //キー入力データで初期化するコンストラクタ public Record2(Scanner stdin){ init(stdin); } //レコードバイナリ読み込み (終端や、失敗時に、shoフィールドへHIGH_VALUEをセット) public boolean readFrom(FileInputStream fis)throws Exception{ if (sho != null && sho.equals(Record2.HIGH_VALUE) == true) { return false; } byte[] a = new byte[6]; int n = fis.read(a);//6byte読み込み if (n == -1) { sho = HIGH_VALUE; return false; } //文字コードを文字にして連結 sho = "" + (char)a[0] + (char)a[1] + (char)a[2]; suu = (short)(0x0ff & a[5]); suu <<= 8; // 1バイト分左シフト(256倍している) suu |= 0x0ff & a[4]; //ビットORで結合 return true; } //レコードをバイナリで書き出す public boolean writeTo(FileOutputStream fos) throws Exception { if (sho.equals(HIGH_VALUE) == true) { return false;//終端を意味するデータは出力しない。 } byte[] a = new byte[6]; a[0] = (byte)sho.charAt(0);//各文字を順番にbyteへ配列にセットする a[1] = (byte)sho.charAt(1); a[2] = (byte)sho.charAt(2); // a[3] = 0; 書かなくてもが設定されているはず a[4] = (byte)(suu & 0x0ff);//shortをbyte列に変換 a[5] = (byte)(suu >> 8); fos.write(a);//ファイルへ、まとめて書き込む return true; } }