ObjectInputStream and Apache-Commons-Net FTPClient



我正在尝试从使用Apache Commons库中的FTPClient类访问的FTP服务器读取文件,但是获取文件retrieveFile(remoteFileName, OutputStream)的方法需要一个OutputStream。我正在尝试获取对象,而无需先将文件写入磁盘。有什么方法可以让 ObjectInputStream 从 OutputStream 中读取?还是我还没有想到的其他方式?

编辑:我尝试了两种方法:

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();
        }
    }
}

堆栈跟踪:

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

使用ByteArrayOutputStream,然后当它闭合时将其字节数组包装在ByteArrayInputStream中并将其包装在ObjectInputStream.

最新更新