Следующее должно работать нормально
processStream(new FileInputStream(file));
Вы должны только не пытаться сериализовать InputStream
экземпляр ObjectOutputStream
, например
objectOutputStream.writeObject(inputStream);
что вы, очевидно, делаете в processStream()
методе.Это именно то, что пытается сказать вам исключение.Как ее решить правильно, зависит от единственного функционального требования, которое вы пропустили в вопросе.
Обновление согласно комментарию
Я передаю InputStream как ответ RMI.
Проблема есть.Вы не можете передавать несериализуемые объекты как ответ RMI, не говоря уже о непрочитанных потоках.Вам нужно прочитать InputStream
в ByteArrayOutputStream
обычным способом ввода-вывода, а затем использовать его toByteArray()
, чтобы получить byte[]
и передать его вместо этого.Что-то вроде:
InputStream input = new FileInputStream(file);
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[8192];
for (int length = 0; (length = input.read(buffer)) > 0;) {
output.write(buffer, 0, length);
}
byte[] bytes = output.toByteArray(); // Pass that instead to RMI response.
Будьте осторожны с большими файлами.Каждый байт byte[]
съедает один байт памяти JVM.