【发布时间】:2015-02-06 07:02:48
【问题描述】:
我希望通过 GAE 将 blob 读/写到 GCS。但是,我面临一个非常奇怪的问题:
我使用以下方法将对象(HashMap)写入 GCS:
GcsOutputChannel outputChannel =
gcsService.createOrReplace(fileName, GcsFileOptions.getDefaultInstance());
ObjectOutputStream oout =
new ObjectOutputStream(Channels.newOutputStream(outputChannel));
oout.writeObject(content);
oout.close();
现在,当我尝试读取同一个对象时,它总是返回 null!
GcsInputChannel readChannel = gcsService.openPrefetchingReadChannel(fileName, 0, BUFFER_SIZE);
ObjectInputStream oin = new ObjectInputStream(Channels.newInputStream(readChannel));
Object obj = oin.readObject();
System.out.println("obj is " + obj); //this obj is null!!
我还可以看到使用 GCS 浏览器创建的对象并查看时间戳,并且它具有一定的大小。 在阅读之前,我可以获得该对象的元数据,它返回正常并且长度也正确!只是“readObject”返回 null! 尝试了其他对象序列化方法,但无济于事。
有趣的是,我能够将 String 作为 byte[] 写入存储桶并毫无问题地读回它。所以不要以为权限/配置有什么问题。
这发生在本地主机和生产环境中。
GAE Java 1.9.17 GCS appengine-gcs-client-0.4.4.jar google-api-services-storage-v1-rev26-1.19.1.jar
有人知道哪里出了问题吗?
谢谢,阿西姆
【问题讨论】:
-
写完后你的代码中是否有
outputChannel.waitForOutstandingWrites()? -
嗨,Igor,不,我的代码中没有 waitForOutstandingWrites()。
标签: google-app-engine google-cloud-storage