Я пытаюсь прочитать файл с FTP-сервера, доступ к которому с классом FTPClient из библиотеки Apache Commons, но для получения файла retrieveFile(remoteFileName, OutputStream)
нужен OutputStream. Я пытаюсь получить объект без предварительной записи файла на диск. Есть ли способ получить ObjectInputStream для чтения из OutputStream? Или каким-то другим способом, о котором я еще не думал?ObjectInputStream и Apache-Commons-Net FTPClient
EDIT: Я попробовал два способа:
public class FTPObjectReader
{
public static Object read()
{
try
{
FTPClient ftp = new FTPClient();
// Connect and stuff
// Way one
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ftp.retrieveFile("Data.dat", baos);
baos.close();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream = new ObjectInputStream(bais);
Object o = ois.readObject();
// Way two
ObjectInputStream ois = new ObjectInputStream(ftp.retrieveFileStream("Data.dat"));
Object o = ois.readObject();
}
}
}
Stack след:
java.io.StreamCorruptedException: invalid type code: 0A
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readArray(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at com.microgodrad.dev.Net.FTPObjectReader(FTPObjectReader.java:14)
at com.microgodrad.dev.Net.main(Net.java:162) // File that calls this function
Какой объект? Действительно ли файл, который вы извлекаете, содержит сериализованный объект? – EJP
Да, я использовал ObjectOutputStream для записи в первую очередь. – Qyriad