Java 应用程序引擎/Google云存储输入流错误
我在写入检索到的Java 应用程序引擎/Google云存储输入流错误,java,google-app-engine,google-cloud-storage,Java,Google App Engine,Google Cloud Storage,我在写入检索到的ObjectInputStream对象的字节时遇到问题。我需要这个,以便能够访问该格式的文件 这是我当前使用的代码: public ObjectInputStream serve(String fileName) throws IOException, ClassNotFoundException { GcsFilename gcsFileName = getFileName(fileName, defaultbucketName); int
ObjectInputStream
对象的字节时遇到问题。我需要这个,以便能够访问该格式的文件
这是我当前使用的代码:
public ObjectInputStream serve(String fileName) throws IOException,
ClassNotFoundException {
GcsFilename gcsFileName = getFileName(fileName, defaultbucketName);
int fileSize = (int) gcsService.getMetadata(gcsFileName).getLength();
GcsInputChannel readChannel = null;
readChannel = gcsService.openPrefetchingReadChannel(gcsFileName, 0,
fileSize);
try (ObjectInputStream oin = new ObjectInputStream(
Channels.newInputStream(readChannel))) {
return oin;
}
}
当我运行代码时,它在ObjectInputStream oin=newobjectinputstream(Channels.newInputStream(readChannel))
行失败,并出现错误,例如:
java.io.StreamCorruptedException: invalid stream header: FFD8FFE0
但是,当我将流导出到
HTTPRESPONSE
对象时,没有问题。您可能试图访问的文件不是由ObjectOutputStream
写入的,该文件包含一个特殊的头
因此,要访问该文件,您应该使用Google Cloud Storage编写API或类似以下的虚拟Java程序重写其内容:
FileOutputStream fos = new FileOutputStream("test.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject("your content");
oos.close();
稍后,将
test.txt
上载到您的GCS存储桶。ObjectInputStream.readObject()
返回一个对象。您的方法返回一个ObjectInputStream
。因此,此代码不会编译!另外。。。是否确实可以将输入流视为ObjectInputStream
?我的意思是,您是否在发送站点上使用了ObjectOutputStream
来序列化对象?这是一个输入错误,不应该返回对象。我应该马上回来。但是代码在ObjectInputStream oin=newObjectInputStream(Channels.newInputStream(readChannel))时仍然失败