Как передать файл по сети посредством RMI?
От: vera_zv  
Дата: 24.06.03 16:34
Оценка:
У меня возникла следующая проблема. Есть система, в которой клиент и сервер общаются посредством RMI. Клиентское приложение предоставляет возможность пользователю выбрать файл на своем компьютере (это будет картинка — bmp, gif или jpg), затем оно должно отправить этот файл на сервер.

Возникла идея создать у одного из классов сервера метод getFile(FileInputStream in).
Тогда клиент после выбора пользователем файла создавал бы соответствующий FileInputStream и вызывал бы через RMI метод getFile.

Эта идея не работает. При вызове удаленного метода возникает NotSerializableException, так как FileInputStream не реализует интерфейс Serializable.
Существует ли класс, поддерживающий интерфейс Serializable, в который можно было бы поместить файл?

И вообще, как лучше передать файл по сети (желательно с использованием RMI)?
Заранее благодарна.
Re: Как передать файл по сети посредством RMI?
От: supersonic  
Дата: 24.06.03 17:10
Оценка: 2 (1)
Может быть, наведёт на мысль:

import java.io.*;
public class PortableFile implements Serializable
{
private byte[] content;
String name;
public PortableFile( File file ) throws FileNotFoundException
{
this.name = file.getName();
this.content = new byte[ ( int )file.length() ];
try
{
FileInputStream fileInputStream = new FileInputStream( file );
fileInputStream.read( this.content, 0, ( int )file.length() );
fileInputStream.close();
}
catch( IOException e )
{
//
System.out.println( "IOException: " + e );
//
System.exit( 0 );
}
}
public String getName()
{
return this.name;
}

public int getLength()
{
return this.content.length;
}

public byte[] getBytes()
{
return this.content;
}
}


Здесь, надеюсь, всё очень просто.
... << RSDN@Home 1.0 beta 7a >>
Re: Как передать файл по сети посредством RMI?
От: TRV  
Дата: 27.06.03 11:54
Оценка:
Здравствуйте, vera_zv, Вы писали:

VZ>При вызове удаленного метода возникает NotSerializableException, так как FileInputStream не реализует интерфейс Serializable.Существует ли класс, поддерживающий интерфейс Serializable, в который можно было бы поместить файл?


VZ>И вообще, как лучше передать файл по сети (желательно с использованием RMI)?

VZ>Заранее благодарна.

Для передачи объектов нужно, что бы классы этих объектов реализовывали интерфейс Serializable. Попробуйте создать свой класс и имплементировать интерфейс Serializable (если я не ошибаюсь, никаких методов реализовывать не нужно).
... << RSDN@Home 1.0 beta 4 >>
WBR, Руслан
Re: Как передать файл по сети посредством RMI?
От: vera_zv  
Дата: 27.06.03 13:52
Оценка:
Здравствуйте!

Большое спасибо всем за советы.
Оказалось, что можно обойтись и без создания собственного класса вроде PortableFile. Можно записать содержимое файла в массив типа byte[] и передать его как параметр удаленному методу getFile, при этом никаких проблем с сериализацией не возникает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.