Язык SQL

Методы класса Movie для записи и считывания записей


Интерфейс inputOutputRecord, приведенный на 11.11, определяет методы, позволяющие производить считывание и запись объектов как отдельные операции. Поскольку эти методы уже были определены в классе Movie, можно просто превратить каждый объект класса Movie в объект интерфейса InputOutputRecord путем включения строки implements InputOutputRecord в определение класса.

1 public interface InputOutputRecord (

2 public void read(Datainput in)

3 throws IOException;

4 public void write(DataOutput out)

5 throws IOException;

Эти интерфейсы дают возможность определить класс dbjava. files.RecordFile, который наследует класс RandomAccessFile и содержит множество операций записи и считывания записей. На 11.12 показана часть определения этого класса. В этом определении можно увидеть только незначительные отличия от методов, приведенных на 11.10 для класса Movie. Единственной новой особенностью является то, что метод write возвращает значение long, дающее адрес записи внутри данного файла. В следующем сайтебудет показано, что этот адрес используется для поддержки прямого доступа к записям в файлах. Метод getFilePointer класса RandomAccessFile возвращает текущую позицию в файле, что также будет объяснено в следующем разделе.

1 public class RecordFile extends RandomAccessFile {

2 public void read(InputOutputRecord rec)

3 throws IOException {

4 int len = readShort();

5 byte [] buffer = new byte[len];

6 readFully(buffer);

7 //включение байтового массива во входной поток

8 DatalnputStream recStream

9 =new DatalnputStream(new ByteArraylnputStream(buffer));

10 rec.read(recStream);

11 }

12 public long write(InputOutputRecord rec)

13 throws IOException {

14 //внесение записи в байтовый поток

15 //возвращение адреса записи

16 long address = getFilePointer();//текущий адрес

17 ByteArrayOutputstream byteStream

18 = new ByteArrayOutputstream();

19 DataOutputstream recStream

20 = new DataOutputstream(byteStream);

21 rec.write(recStream);

22 //внесение длины и записи в выходной поток

23 byte [] buffer = byteStream.toByteArray();

24 writeShort (buffer.length);

25 write(buffer);

26 return address;

27 )

28 };

Комментарии закрыты