문제

나는 다음과 같은 분야:

  • 재고 관리(16 바이트의 레코드)
    • 제품 코드(int–4 바이트)
    • 재고 수량(int–4 바이트)
    • 가격(double–8 바이트)

을 만들고 싶으면 어떻게 해야 하는 고정 길이는 랜덤 액세스를 사용하여 파일의 위 길이는?저도 몇 가지 예를 온라인으로,그러나 나는 하나를 얻을 EOF 예외 또는 임의의 주소 값을 때도 액세스할 수 있습니다.

나 좀 더 많은 예제와 이해할 수 없는 개념을 매우습니다.하는 프로젝트 그것으로도 더 많은 탐험에습니다.

여기에 몇 가지 예를 들어 데이터입니다.될 수 있습에 구멍이 있는 데이터는 No. in stock23 == 023.

          Quantity
ID. No.   In Stock   Price

-------   --------   ------
 1001       476      $28.35
 1002       240      $32.56
 1003       517      $51.27
 1004       284      $23.75
 1005       165      $32.25

도움을 주셔서 감사합니다.

도움이 되었습니까?

해결책

java.io.randomaccessfile은 당신이 찾고있는 클래스입니다. 예제 구현이 있습니다 (아마도 내가하지 않았 듯이 단위 테스트를 작성하고 싶을 것입니다 :)

package test;

import java.io.IOException;
import java.io.RandomAccessFile;

public class Raf {
    private static class Record{
        private final double price;
        private final int id;
        private final int stock;

        public Record(int id, int stock, double price){
            this.id = id;
            this.stock = stock;
            this.price = price;
        }

        public void pack(int n, int offset, byte[] array){
            array[offset + 0] = (byte)(n & 0xff);
            array[offset + 1] = (byte)((n >> 8) & 0xff);
            array[offset + 2] = (byte)((n >> 16) & 0xff);
            array[offset + 3] = (byte)((n >> 24) & 0xff);
        }

        public void pack(double n, int offset, byte[] array){
            long bytes = Double.doubleToRawLongBits(n);
            pack((int) (bytes & 0xffffffff), offset, array);
            pack((int) ((bytes >> 32) & 0xffffffff), offset + 4, array);
        }

        public byte[] getBytes() {
            byte[] record = new byte[16];
            pack(id, 0, record);
            pack(stock, 4, record);
            pack(price, 8, record);
            return record;
        }
    }

    private static final int RECORD_SIZE = 16;
    private static final int N_RECORDS = 1024;

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        RandomAccessFile raf = new RandomAccessFile(args[0], "rw");
        try{
            raf.seek(RECORD_SIZE * N_RECORDS);

            raf.seek(0);

            raf.write(new Record(1001, 476, 28.35).getBytes());
            raf.write(new Record(1002, 240, 32.56).getBytes());
        } finally {
            raf.close();
        }
    }
}

다른 팁

최근 Java 버전을 관리할 수 있습 랜덤 액세스를 사용하여 파일을 FileChannel.SeekableByteChannel 인터페이스를 정의하는 방법을 변경할 수 있으로 한 포인터 위치에서 대상과 같은 엔터티는 파일의 채널에 연결되어 있습니다.FileChannel 구현 SeekableByteChannel 을 관리할 수 있 랜덤 액세스를 사용하여 파일을습니다.방법 크기,위치,자르도록 허용할 파일을 읽고 쓸습니다.

http://www.zoftino.com/java-random-access-files 자세한 내용은 예입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top