我正在尝试从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
答案 0 :(得分:0)
使用ByteArrayOutputStream
,然后当它关闭时将其字节数组包装在ByteArrayInputStream
中并将其包装在ObjectInputStream.