我希望通过GAE读/写blob到GCS。使用从Google Cloud Storage读取对象始终返回空
我写一个对象(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! 尝试了其他对象序列化方法,但无济于事。
有趣的是,我能够将字符串[byte []]写入存储区并读取回来,没有任何问题。所以不要认为有任何与权限/配置有关的问题。
这发生在localhost以及生产上。
GAE的Java 1.9.17 GCS的AppEngine-GCS-客户0.4.4.jar 谷歌的API服务存储-V1-rev26-1.19.1.jar
有谁知道这可能是出错了?
感谢,阿西
做你'outputChannel.waitForOutstandingWrites()'地方在你的代码完成后,写作? – 2015-02-06 07:51:24
嗨伊戈尔,不,我没有在代码中的waitForOutstandingWrites()。 – AAP 2015-02-06 08:21:10