从 Google Cloud Storage 读取对象总是 returns null
Reading object from Google Cloud Storage always returns null
我希望通过 GAE read/write 一个 blob 到 GCS。但是,我面临一个非常奇怪的问题:
我使用以下方法将对象 (HashMap) 写入 GCS:
GcsOutputChannel outputChannel =
gcsService.createOrReplace(fileName, GcsFileOptions.getDefaultInstance());
ObjectOutputStream oout =
new ObjectOutputStream(Channels.newOutputStream(outputChannel));
oout.writeObject(content);
oout.close();
现在,当我尝试读取同一个对象时,它总是 returns 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 浏览器创建的对象和时间戳,并且它有一定的大小。
在阅读之前,我可以获得该对象的元数据并且它 returns 很好并且长度也正确!就是"readObject" returns null!
尝试了其他对象序列化方法,但无济于事。
有趣的是,我能够将 String 作为 byte[] 写入存储桶并毫无问题地读回。所以不要认为 permission/configuration.
有任何问题
这在本地主机和生产环境中都会发生。
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()
将您的写入刷新到 GCS,例如:
GcsOutputChannel outputChannel =
gcsService.createOrReplace(fileName, GcsFileOptions.getDefaultInstance());
ObjectOutputStream oout =
new ObjectOutputStream(Channels.newOutputStream(outputChannel));
oout.writeObject(content);
outputChannel.waitForOutstandingWrites()
我希望通过 GAE read/write 一个 blob 到 GCS。但是,我面临一个非常奇怪的问题:
我使用以下方法将对象 (HashMap) 写入 GCS:
GcsOutputChannel outputChannel =
gcsService.createOrReplace(fileName, GcsFileOptions.getDefaultInstance());
ObjectOutputStream oout =
new ObjectOutputStream(Channels.newOutputStream(outputChannel));
oout.writeObject(content);
oout.close();
现在,当我尝试读取同一个对象时,它总是 returns 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 浏览器创建的对象和时间戳,并且它有一定的大小。 在阅读之前,我可以获得该对象的元数据并且它 returns 很好并且长度也正确!就是"readObject" returns null! 尝试了其他对象序列化方法,但无济于事。
有趣的是,我能够将 String 作为 byte[] 写入存储桶并毫无问题地读回。所以不要认为 permission/configuration.
有任何问题这在本地主机和生产环境中都会发生。
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()
将您的写入刷新到 GCS,例如:
GcsOutputChannel outputChannel =
gcsService.createOrReplace(fileName, GcsFileOptions.getDefaultInstance());
ObjectOutputStream oout =
new ObjectOutputStream(Channels.newOutputStream(outputChannel));
oout.writeObject(content);
outputChannel.waitForOutstandingWrites()