2014-11-20 3 views
-1

Я пытаюсь прочитать файл с 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 
+0

Какой объект? Действительно ли файл, который вы извлекаете, содержит сериализованный объект? – EJP

+0

Да, я использовал ObjectOutputStream для записи в первую очередь. – Qyriad

ответ

0

Используйте ByteArrayOutputStream, а затем, когда она закрыта завернуть его байтовый массив в ByteArrayInputStream и завернуть, что в a ObjectInputStream.

+0

Когда я выполняю 'readObject()' в ObjectInputStream, я получаю исключение StreamCorruptedException. – Qyriad

+0

Пожалуйста, разместите в своем вопросе всю ошибку исключения, сообщения и стека; также код, который вы сейчас используете. – EJP

+0

Отредактированный оригинальный вопрос с запрошенной вами информацией. – Qyriad