Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: А.В. Фролов, Г.В. Фролов - Microsoft Visual J++
<<-[Весь Текст]
Страница: из 275
 <<-
 
 данных 
имеются следующие записи:
   
Номер записиСмещение в файле данныхПоле nameПоле account00Ivanov1000112Petrov
2000224Sidoroff3000   
   При последующих запусках каждый раз в файл данных будут добавляться 
приведенные выше записи.
   Так как поле name имеет переменную длину, для обеспечения возможности 
прямого доступа к записи по ее номеру необходимо где-то хранить смещения всех 
записей. Мы это делаем в файле индексов, дамп которого на момент после первого 
запуска приложения представлен на рис. 2.12.

Рис. 2.12. Дамп файла индекса
   Файл индексов хранит 8-байтовые смещения записей файла данных в формате long.
 Зная номер записи, можнор легко вычислить смещение в файле индексов, по 
которому хранится смещение нужной записи в файле данных. Если извлечь это 
смещение, то можно выполнить позиционирование в файле данных с целью чтения 
нужной записи, что и делает наше приложение.
   После добавления трех записей в базу данных приложение извлекает три записи 
в обратном порядке, то есть сначала запись с номером 2, затем с номером 1, и, 
наконец, с номером 0. Извлеченные записи отображаются в консольном окне 
приложения (рис. 2.13).

Рис. 2.13. Отображение записей базы данных приложением DirectFileAccess
   Исходные тексты приложения 
   Исходные тексты приложения DirectFileAccess приведены в листинге 2.9.
Листинг 2.9. Файл DirectFileAccess\DirectFileAccess.java
// =========================================================
// Прямой доступ к файлу с помощью класса RandomAccessFile
//
// (C) Фролов А.В, 1997
//
// E-mail: [email protected]
// WWW:    http://www.glasnet.ru/~frolov
//            или
//         http://www.dials.ccas.ru/frolov
// =========================================================
import java.io.*;
import java.util.*;

// =========================================================
// Класс DirectFileAccess
// Главный класс приложения
// =========================================================
public class DirectFileAccess
{
  // -------------------------------------------------------
  // main
  // Метод, получающий управление при запуске приложения
  // -------------------------------------------------------
  public static void main(String args[])
  {
    // Массив для ввода строки с клавиатуры
    byte bKbdInput[] = new byte[256];

    try
    {
      // Создаем новую базу данных
      SimpleDBMS db = new SimpleDBMS(
        "dbtest.idx", "dbtest.dat");
      
      // Добавляем в нее три записи
      db.AddRecord("Ivanov",   1000);
      db.AddRecord("Petrov",   2000);
      db.AddRecord("Sidoroff", 3000);
 
      // Получаем и отображаем содержимое первых трез
      // записей с номерами 2, 1 и 0
      System.out.println(db.GetRecordByNumber(2));
      System.out.println(db.GetRecordByNumber(1));
      System.out.println(db.GetRecordByNumber(0));

      // Закрываем базу данных
      db.close();
      
      // После ввода любой строки завершаем работу программы
      System.out.println("Press  to terminate...");
      System.in.read(bKbdInput);
    }
    catch(Exception ioe)
    {
      System.out.println(ioe.toString());
    }
  }
}

// =========================================================
// Класс SimpleDBMS
// Простейшая база данных
// =========================================================
class SimpleDBMS
{
  // Файл индексов
  
 
<<-[Весь Текст]
Страница: из 275
 <<-