Главная страница
Навигация по странице:

  • Метод вывода данных Описание

  • Метод ввода данных Описание boolean readBoolean()

  • Пример для опробования 10.1.

  • Ответы на вопросы по ревью 4. Java io. Ключевым понятием здесь является понятие потока


    Скачать 1.93 Mb.
    НазваниеJava io. Ключевым понятием здесь является понятие потока
    Дата03.07.2022
    Размер1.93 Mb.
    Формат файлаdoc
    Имя файлаОтветы на вопросы по ревью 4.doc
    ТипДокументы
    #623608
    страница10 из 39
    1   ...   6   7   8   9   10   11   12   13   ...   39

    Чтение и запись двоичных данных


    В приведенных до сих пор примерах программ читались и записывались байтовые значения, содержащие символы в коде ASCII. Но аналогичным образом можно также организовать чтение и запись любых типов данных. Допустим, требуется создать файл, содержащий значения типа int, double или short. Для чтения и записи простых типов данных в Java предусмотрены классы DatalnputStream и DataOutputStream.

    Класс DataOutputStream реализует интерфейс DataOutput, в котором определены методы, позволяющие записывать в файл значения любых простых типов. Следует, однако, иметь в виду, что данные записываются во внутреннем двоичном формате, а не в виде последовательности символов. Методы, наиболее часто применяемые для записи простых типов данных в Java, приведены в табл. 10.5. Каждый из них генерирует исключение IOException при возникновении ошибки ввода-вывода.

    Таблица 10.5. Наиболее часто употребляемые методы вывода данных, определенные в классе DataOutputStream

    Метод вывода данных

    Описание

    void writeBoolean (boolean val)

    Записывает логическое значение, определяемое параметром val

    void writeByte (int,val)

    Записывает младший байт целочисленного значения, определяемого параметром val

    void writeChar (int,val)

    Записывает значение, определяемое параметром val, интерпретируя его как символ

    void writeDouble (double val)

    Записывает значение типа double, определяемое параметром val

    void writeFloat (float val)

    Записывает значение типа float, определяемое параметром val

    void writelnt(int val)

    Записывает значение типа int, определяемое параметром val

    void writeLong (long val)

    Записывает значение типа long, определяемое параметром val

    void writeShort (int val)

    Записывает целочисленное значение, определяемое параметром val, преобразуя его в тип short

    Ниже приведен конструктор класса DataOutputStream. Обратите внимание на то, что при вызове ему передается экземпляр класса OutputStream.

    DataOutputStream(OutputStream OutputStream)

    где OutputStream — это поток вывода, в который записываются данные. Для того чтобы организовать запись данных в файл, следует передать конструктору в качестве параметра OutputStream объект типа FileOutputStream.

    Класс DatalnputStream реализует интерфейс Datalnput, в котором объявлены методы для чтения всех простых типов данных в Java (табл. 10.6). В каждом из этих методов может быть сгенерировано исключение IOException при возникновении ошибки ввода-вывода. В качестве своего основания класс DatalnputStream использует экземпляр класса InputStream, перекрывая его методами для чтения различных типов данных в Java. Однако в потоке типа DatalnputStream данные читаются в двоичном виде, а не в удобной для чтения форме. Ниже приведен конструктор класса DatalnputStream.

    DatalnputStream(InputStream inputStream)

    где inputStream — это поток, связанный с создаваемым экземпляром класса DatalnputStream. Для того чтобы организовать чтение данных из файла, следует передать конструктору в качестве параметра inputStream объект типа FilelnputStream.

    Таблица 10.6. Наиболее часто употребляемые методы ввода данных, определенные в классе DatalnputStream

    Метод ввода данных

    Описание

    boolean readBoolean()

    Читает значение типа boolean

    byte readByte()

    Читает значение типа byte

    char readChar()

    Читает значение типа char

    double readDouble()

    Читает значение типа double

    float readFloat()

    Читает значение типа float

    int readlnt()

    Читает значение типа int

    long readLong()

    Читает значение типа long

    short readShort()

    Читает значение типа short

    Ниже приведен пример программы, демонстрирующий применение классов DataOutputStream и DatalnputStream. В этой программе данные разных типов сначала записываются в файл, а затем читаются из файла.

    // Запись и чтение двоичных данных.Для компиляции этого кода

    // требуется JDK 7 или более поздняя версия данного комплекта.
    import java.io.*;
    class RWData {

    public static void main(String args[])

    {

    int i = 10;

    double d = 1023.56;

    boolean b = true;
    // записать ряд значений

    try (DataOutputStream dataOut =

    new DataOutputStream(new FileOutputStream("testdata")))

    {

    // Запись двоичных данных в файл testdata.

    System.out.println("Writing " + i) ;

    dataOut.writelnt(i);
    System.out.println("Writing " + d) ;

    dataOut.writeDouble(d);
    System.out.println("Writing " + b);

    dataOut.writeBoolean(b);
    System.out.println("Writing " + 12.2 * 7.4);

    dataOut.writeDouble(12.2 * 7.4);

    }

    catch(IOException exc) {

    System.out.println("Write error.");

    return;

    }
    System.out.println() ;
    // а теперь прочитать записанные значения

    try (DatalnputStream dataln =

    new DatalnputStream(new FilelnputStream("testdata")))

    {

    // Чтение двоичных данных из файла testdata.

    i = dataln.readlnt();

    System.out.println("Reading " + i) ;
    d = dataln.readDouble();

    System.out.println("Reading " + d);
    b = dataln.readBoolean() ;

    System.out.println("Reading " + b);
    d = dataln.readDouble();

    System.out.println("Reading " + d) ;

    }

    catch(IOException exc) {

    System.out.println("Read error.");

    }

    }

    }

    Выполнение этой программы дает следующий результат:

    Writing 10

    Writing 1023.56

    Writing true

    Writing 90.28
    Reading 10

    Reading 1023.56

    Reading true

    Reading 90.28

    Пример для опробования 10.1. Утилита сравнения файлов

    В этом проекте предстоит создать простую, но очень полезную утилиту для сравнения содержимого файлов. В ходе выполнения этой сервисной программы сначала открываются два сравниваемых файла, а затем данные читаются из них и сравниваются по соответствующему количеству байтов. Если на какой-то стадии операция сравнения дает отрицательный результат, это означает, что содержимое обоих файлов не одинаково. Если же конец обоих файлов достигается одновременно, это означает, что они содержат одинаковые данные.

    Последовательность действий

    1. Создайте файл CompFiles.java.

    2. Введите в файл CompFiles.java приведенный ниже исходный код.

    /*

    Для того чтобы воспользоваться этой программой, укажите

    имена сравниваемых файлов в командной строке, например:

    java CompFile FIRST.TXT SECOND.TXT

    Для компиляции этого кода требуется JDK 7

    или более поздняя версия данного комплекта.

    */

    import java.io.*;

    class CompFiles {

    public static void main(String args[])

    {

    int i=0, j=0;
    // Прежде всего следует убедиться, что файлы были указаны,

    if(args.length !=2 ) {

    System.out.println("Usage: CompFiles fl f2");

    return;

    }
    // сравнить файлы

    try (FilelnputStream fl = new FilelnputStream(args[0]);

    FilelnputStream f2 = new FilelnputStream(args[1]))

    {

    // проверить содержимое каждого файла

    do {

    i = f1.read();

    j = f2.read();

    if(i != j) break;

    } while (i != -1 && j != -1) ;
    if(i != j)

    System.out.println("Files differ.");

    else

    System.out.println("Files are the same.");

    } catch(IOException exc) {

    System.out.println("I/O Error: " + exc);

    }

    }

    }

    1. Для опробования программы скопируйте сначала файл CompFiles. java во временный файл temp, а затем введите в командной строке следующее:

    java CompFiles CompFiles.java temp

    1. Программа сообщит, что файлы одинаковы. Далее сравните файл CompFiles.java с рассмотренным ранее файлом CopyFile. j ava, введя в командной строке следующее:

    java CompFiles CompFiles.java CopyFile.java

    1. Эти файлы содержат разные данные, о чем и сообщит программа CompFiles.

    2. Попробуйте самостоятельно внедрить в программу CompFiles ряд дополнительных возможностей. В частности, введите в нее возможность выполнять сравнение без учета регистра символов. Программу CompFiles можно также доработать таким образом, чтобы она выводила место, где обнаружено первое отличие сравниваемых файлов.



    1   ...   6   7   8   9   10   11   12   13   ...   39


    написать администратору сайта