Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpory_java_2_semtcnh.doc
Скачиваний:
2
Добавлен:
22.09.2019
Размер:
425.98 Кб
Скачать

Класс RandomAccessFile

Обеспечивает прямой доступ к файлу. Этот класс реализует интерфейсы – DataInput и DataOutput ,т.е. может производить запись и чтение всех примитивных типов и тип String (ReadLn(),ReadUTF()) Java. После создания объекта RandomAccessFile

можно воспользоваться методами интерфейсов DataInput и DataOutput для проведения с файлом операций считывания и записи.

Операции чтения и записи можно осуществлять, произвольным образом перемещаясь по файлу с помощью вызова метода seek(long) –

переводит файловый указатель на указанную позицию в файле .

Узнать текущее положение указателя в файле можно вызовом метода getFilePointer.

конструкторы:

1.Public RandomAccessFile ( String name,String mode) throws IOException

2.Public RandomAccessFile ( File file,String mode) throws IOException

Методы

1.public long getFilePointer ( ) -

текущее смещение от начала файла (в байтах)

2.public void seek (long pos) –

Установка указателя в заданную позицию (в байтах)

3.public long length ( )

4. public void setlength ( long l)

5. public void close() –закрытие файла

6. public final FileDescriptor getFD()-позволяет получить дескриптор файла

Пример Чтение/запись в файл в

произвольном порядке

import java.io.*;

public class RandomAccessDemo { public static void main(String[] args)

throws IOException {

RandomAccessFile rf = new

RandomAccessFile("rtest.dat", "rw");

for(int i = 0; i < 10; i++)

rf.writeDouble(i*1.414);

rf.close();

rf = new

RandomAccessFile("rtest.dat", "rw");

rf.seek(5*8);

rf.writeDouble(47.0001);

rf.close();

rf = new

RandomAccessFile("rtest.dat","r");

for(int i = 0; i < 10; i++)

System.out.println( "Value " + i + ":"

+ rf.readDouble());

rf.close();}}

Сериализация и десериализация объектов

Для объектов процесс преобразования в последовательность байт называется

сериализация (serialization), обратное действие, – то есть воссоздание объекта из последовательности байт – десериализация

Для представления объектов в виде последовательности байт определены унаследованные от DataInput и DataOutput интерфейсы ObjectInput и ObjectOutput

В java.io имеются реализации этих интерфейсов – классы

ObjectInputStream - десериализация

ObjectOutputStream. -сериализация

Сериализация объекта достаточно проста, если объект реализует интерфейс Serializable

В этом интерфейсе не определен ни один метод. Он нужен лишь для указания, что объекты класса могут участвовать в сериализации.

При попытке сериализовать объект, не имеющий такого интерфейса, возбуждается java.io.NotSerializableException

Процесс заключается в сериализации каждого поля объекта, но только в том случае если это поле не имеет модификатора доступа static или transient. Модификатор transient означает, что поле им помеченное не может быть предметом сериализации.

Для сериализации объекта

1.создается определенный тип объекта класса OutputStream

2.затем он “вкладывается” в объект

ObjectOutputStream.

3.вызывается writeObject( ) и объект будет сериализован и послан в OutputStream (как правило файл)

Для десериализации

1. создается соответствующий тип

объекта класса InputStream

2.затем он “вкладывается” в объект

ObjectInputStream .

3. вызывается readObject( )и объект будет приведен к соответствующему типу

класс Object не реализует интерфейс Serializable т.е., существует два варианта – либо сериализуемый класс наследуется от Serializable-класса, либо нет

Если родительский класс уже реализовал интерфейс Serializable, то наследникам это свойство передается автоматически, то есть все объекты, порожденные от такого класса, или любого его наследника, могут быть сериализованы

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

Пример

class FileSave{

public void saveFile(Collect c, String filename)throws IOException{

FileOutputStream fileOutput = new FileOutputStream(filename);

ObjectOutputStream objectOutput = new ObjectOutputStream(fileOutput);

objectOutput.writeObject(c);

objectOutput.close();

fileOutput.close();}

public Collect loadFile(String filename) throws IOException, ClassNotFoundException{

FileInputStream fileInput = new FileInputStream(filename);

ObjectInputStream objectInput = new ObjectInputStream(fileInput);

Collectc=(Collect)objectInput.readObject();

objectInput.close();

fileInput.close();

return c;}}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]