Getting Started(Google Cloud Storage Client Library)
在运行下面的步骤之前,请确保:
1.你的项目已经激活了Google Cloud Storage和App Engine,包括已经创建了至少一个Cloud Storage bucket。
2.你已经下载了client库并解压了。
3.你已经安装并配置了最新的App Engine Java SDK。
运行LocalExample.java例子
LocalExample.java是一个非部署的例子,有助于快速测试和调查Cloud Storage的功能。除了Eclipse控制台输出它没有UI组件。(Cloud Storage client library deployable samples有UI也是可以获取的)
在Eclipse中运行LocalExample.java
1.开始Eclipse
2.在Eclipse中,单击Windows->Preferneces->Google->App Engine然后单击Add。
3.跟随提示,提供App Engine SDK的安装路径,然后单击OK。
4.在Files菜单中,单击Files->New->Java Project,创建一个名称为LocalExample的项目,并使用包名称com.google.appengine.demos。
5.在Package Explorer中选择这个项目,单击Files->New->Class并给这个类命名LocalExample,并使用包名称com.google.appengine.demos。
6.拷贝 LocalExampleJava source 的内容到这个类文件中。
7.在Package Explorer中再次选择这个项目,并右击,单击Properties->Java Build Path.
8.在Libraries tab,单击Add External Jars。必须追加下面的JARs:
● appengine-gcs-client.jar 来自你安装的Cloud Storage client库
● guava-15.0.jar 来自你安装的Cloud Storage client库
● joda-time-2.3.jar来自你安装的Cloud Storage client库
● appengine-testing.jar 来自App Engine 安装的子目录 /lib/testing
● appengine-api.jar 来自App Engine 安装的子目录 /lib/impl
● appengine-api-stubs.jar 来自App Engine 安装的子目录 /lib/impl
9.编译,运行Run as-> Java Application
10.在Eclipse Console中看到如下输出:

调查LocalExample.java例子
LocalExample.java在下面做了详细描述,说明了Cloud Storage client库的使用。
Imports
有一些使用的imports你可能不需要,或者本地测试会用到。下面列出了例子的imports。
import com.google.appengine.tools.cloudstorage.GcsFileOptions;
import com.google.appengine.tools.cloudstorage.GcsFilename;
import com.google.appengine.tools.cloudstorage.GcsInputChannel;
import com.google.appengine.tools.cloudstorage.GcsOutputChannel;
import com.google.appengine.tools.cloudstorage.GcsService;
import com.google.appengine.tools.cloudstorage.GcsServiceFactory;
import com.google.appengine.tools.cloudstorage.RetryParams;
import com.google.appengine.tools.development.testing.LocalBlobstoreServiceTestConfig;
import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig;
import com.google.appengine.tools.development.testing.LocalServiceTestHelper; import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
下面简要介绍了这些imports:
com.google.appengine.tools.cloudstorage.*使我们可以使用Cloud Storage client库。
com.google.appengine.tools.development.testing.* 仅在做某些App Engine特性的本地单元测试时需要。
java.io.ObjectInputStream 和java.io.ObjectOutputStream 用来读写对象。
java.nio.ByteBuffer用于非缓冲的读写
java.io.IOException 错误处理时需要(尽管没有列出)
java.nio.channels.Channels 用于将输入输出通道转换为流
java.nio.channels.ReadableByteChannel 用于从Cloud Storage中读取数据
创建一个GcsService来发送请求
通过库发送和接受请求到Cloud Storage,你需要一个GcsService实例:
private final GcsService gcsService =
GcsServiceFactory.createGcsService(RetryParams.getDefaultInstance());
在这个片段中,注意在createGcsService中RetryParams的使用。如上所示,createGcsService(RetryParams.getDefaultInstance()),这设置了默认的重试配置,当访问Cloud Storage时,发生超时或者意想不到的错误时会进行重试。为了指定不同的值,比如重试的最大次数,你使用RetryParams.Builder 在一个新的 RetryParams对象中改变配置,并且在创建GcsService时提供它。注意一旦这个GcsService对象被创建了,它的重试参数不能被改变。
你可以创建任意多的GcsService实例。每一个实例是独立的,不可变的(因此是线程安全的),可重复使用的。比如,一个可以使用某个参数设置来写文件,同时另一个可以使用不同的重试参数来读不同的文件。
一个推荐的实践是在你的每个I/O类中使用独立的实例。这将帮助保持你的类的独立,以及少的开销。
向Cloud Storage写数据
下面的例子展示了如何向Cloud Storage的文件中写数据。独立的片段提供了写可序列化对象数据和字节数组。
Cloud Storage文件不会完全创建好直到close被调用
在下面的片段中,在finally块中没有出现close,就像Java中经常做的。所以有异常时,任何被写的部分都会自动地被清除。
向Cloud Storage写对象
这儿是说明如何序列化对象到Cloud Storage 文件。首先,获取一个可写的字节通道:
GcsOutputChannel outputChannel =
gcsService.createOrReplace(fileName, GcsFileOptions.getDefaultInstance());
在这个片段中GcsService.createOrReplace 被调用了,GcsFilename 作为第一个参数。这个对象包含了要使用的bucket的名称以及对象的名称。如果在bucket已经有了一个同名的对象,并且你的应用有写的权限,这个调用会覆盖存在的文件(Cloud Storage不支持附加)。如果没有那个名字的文件,这个调用的结果就是创建了一个新文件。
第二个参数是GcsFileOptions。要使用默认的选项,使用GcsFileOptions.getDefaultInstance。要使用自己的设置,使用GcsFileOptions.Builder来设置选项并创建一个GcsFileOptions作为第二个参数。
这个文件选项被传递给Cloud Storage告诉它文件的文本类型,在头部你想传递的用户元数据,文件访问管理ACL等等。如果你不提供一个文本类型(mimeType),这个文件将会被Cloud Storage以默认的MIME类型提供(serve),目前使用的是binary/octet-stream。如果你不指定一个ACL,分配的对象访问权限是当前默认的对象ACL。
注意所有的文件选项信息都可以在一个Close之后,通过调用GcsService.getMetadata(fileName)从一个对象中获取,而不需要它自己下载这个对象。
关于更多的配置信息,浏览Cloud Storage文档的ACLs和file options。
现在使用一个输出流来写数据
@SuppressWarnings("resource")
ObjectOutputStream oout =
new ObjectOutputStream(Channels.newOutputStream(outputChannel));
oout.writeObject(content);
oout.close();
向Cloud Storage文件中写字节数组
这儿说明如何向Cloud Storage文件中写字节数组。
@SuppressWarnings("resource")
GcsOutputChannel outputChannel =
gcsService.createOrReplace(fileName, GcsFileOptions.getDefaultInstance());
outputChannel.write(ByteBuffer.wrap(content));
outputChannel.close();
在createOrReplace调用中使用的参数的说明,参见Writing an Object to Cloud Storage下的说明。
从Cloud Storage中读取数据
下面的例子说明如何从存储在Cloud Storage中的文件读取数据。分开的片段提供了读Cloud Storage文件到对象(序列化)和字节数组。
将Cloud Storage读到一个对象
这个方法对于读大文件到一个缓冲中是有用的。
GcsInputChannel readChannel = gcsService.openPrefetchingReadChannel(fileName, 0, 1024 * 1024);
这个调用 GcsService.openPrefetchingReadChannel 有一个 GcsFilename,它包含了要读取的bucket的名字和要被读的对象。第二个参数是文件开始读的字节,0表示从文件的开头开始读。如果你提供了文件中其他的开始位置,比如字节300,这个读操作从字节300开始到文件的末尾,或直到你停止读。(预读缓冲会先读,它将包含超过你要停止的位置的字节)
预读对大部分应用而言是一个主要的优势,因为当更多的数据正在后台被下载的时候,允许并行地处理文件的一部分。
第三个参数就是预读的缓冲的尺寸,在这个例子中设置为1MB。
现在,从通道中读文件:
try (ObjectInputStream oin = new ObjectInputStream(Channels.newInputStream(readChannel))) {
return oin.readObject();
}
读数据到字节数组
对于小文件,你可以一次读取所有的文件到字节数组中:
int fileSize = (int) gcsService.getMetadata(fileName).getLength();
ByteBuffer result = ByteBuffer.allocate(fileSize);
try (GcsInputChannel readChannel = gcsService.openReadChannel(fileName, 0)) {
readChannel.read(result);
}
在上面的片段中,注意java.nio.ByteBuffer的使用,特别是缓冲的尺寸的设置等于要从通道中读取的文件的尺寸。
注意,对于大多数应用,更喜欢的方法是读(stream)文件(读数据到对象中),因为这不需要在内存中一次就保存所有的数据。
有UI的可部署的Cloud Storage Client库的例子
对于有UI的可部署例子,浏览代码:
● GcsExampleServlet.java从Cloud Storage中上传下载文件
● PortOfFilesAPIGuestbookServlet.java是例子程序的端口(port),之前使用现已过时的Files API。更多关于迁移的信息,参见Migrating from the Files API。
在development server上运行以及部署之前需要编译这个例子。
编译这个例子:
1.从终端中Checkout代码
svn checkout http://appengine-gcs-client.googlecode.com/svn/trunk/ appengine-gcs-client-read-only
2.切换目录到ppengine-gcs-client-read-only/java
3.调用ant compile_example,这会用目录中的build.xml来编译例子。更多的关于使用Apache Ant的信息,参见 Using Apache Ant.
4.调用下面命令,运行dev server:
/path/to/AppEngSDK/dev_appserver.sh /path/to/example/war
5.在你的浏览其中浏览 localhost:8080。看到下图:

Getting Started(Google Cloud Storage Client Library)的更多相关文章
- Downloading the Google Cloud Storage Client Library
Google Cloud Storage client是一个客户端库,与任何一个生产环境使用的App Engine版本都相互独立.如果你想使用App Engine Development server ...
- Java Client for Google Cloud Storage
关于Google Cloud Storage Google Cloud Storage有益于大文件的存储与服务(serve).此外,Cloud Storage提供了对访问控制列表(ACLs)的使用,提 ...
- Activating Google Cloud Storage
先决条件 你需要下面的内容: 1.一个Google账户,比如来自Gmail.如果你没有,请在Google account signup site注册. 2.一个新的或已经存在的Google Devel ...
- 使用GCM服务(Google Cloud Messaging)实现Android消息推送
最近在网上查了关于很多Android消息推送的资料,其中主要有四种方法. 1) 使用GCM服务(Google Cloud Messaging) 2) 使用XMPP协议(Openfire + Spark ...
- 操作系统:Android(Google公司开发的操作系统)
ylbtech-操作系统:Android(Google公司开发的操作系统) Android是一种基于Linux的自由及开放源代码的操作系统.主要使用于移动设备,如智能手机和平板电脑,由Google(谷 ...
- Azure Storage Client Library 重试策略建议
有关如何配置 Azure Storage Library 重试策略的信息,可参阅 Gaurav Mantri 撰写的一篇不错的文章<SCL 2.0 – 实施重试策略>.但很难找到关于使用何 ...
- google cloud storage products
https://cloud.google.com/products/storage/ BigTable Cloud Bigtable 是 Google 面向大数据领域的 NoSQL 数据库服务.它也是 ...
- Java 9 揭秘(14. HTTP/2 Client API)
Tips 做一个终身学习的人. 在此章中,主要介绍以下内容: 什么是HTTP/2 Client API 如何创建HTTP客户端 如何使HTTP请求 如何接收HTTP响应 如何创建WebSocket的e ...
- 【Android Developers Training】 89. 最大化的使用谷歌云消息(Google Cloud Messaging)
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
随机推荐
- WCF入门(十)---WCF事务
事务处理在WCF(Windows Communication Foundation)是一套遵循一些性质,统称为ACID的操作.这里,如果一个操作出现故障,整个系统就会自动失败.如网上订单生成,就可能使 ...
- JavaScript基础精华01(变量,语法,数据类型)
JavaScript是一种脚本语言. 脚本,一条条的文字命令.执行时由系统的一个解释器,将其一条条的翻译成机器可识别的指令,然后执行 JavaScript基本组成 1.基本语法(浏览器基本都支持,有统 ...
- HDU5086——Revenge of Segment Tree(BestCoder Round #16)
Revenge of Segment Tree Problem DescriptionIn computer science, a segment tree is a tree data struct ...
- openfire的smack和asmack
smack你可以看成是一套封装好了的用于实现XMPP协议传输的API,它是一个非常简单并且功能强大的类库,给用户发送消息只需要三行代码.下载地址:http://www.igniterealtime.o ...
- Linux 下查看文件字符编码和转换编码
Linux 下查看文件字符编码和转换编码 如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而Linu ...
- 使用Quartz创建定时任务
项目开发中经常需要定时循环执行某些任务 比如定时发送报表,定时发送邮件,亦或者定时清理缓存,定时更新数据等等 有些时候可以简单地利用Windows Server的计划任务执行程序 Linux也有相应的 ...
- NYOJ 536 开心的mdd【矩阵链乘】
题意:给出n个矩阵组成的序列,问最少的运算量 看的紫书: dp[i][j]表示从第i个矩阵到第j个矩阵最少的乘法次数 dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j] ...
- eval绑定decimal数据后,如何去掉后面没有意义的0?
假如有个数字是 25.00 就应该只显示 25 ,而如果是25.3 则还是显示 25.3 Score.ToString("g0") 这样就可以去掉 decimal 后面多 ...
- PS流格式
概念: 将具有共同时间基准的一个或多个PES组合(复合)而成的单一的数据流称为节目流(Program Stream). ES是直接从编码器出来的数据流,可以是编码过的视频数据流,音频数据流,或其他编码 ...
- 转载RabbitMQ入门(4)--路由
路由 (使用Java客户端) 在先前的指南中,我们建立了一个简单的日志系统.我们可以将我们的日志信息广播到多个接收者. 在这部分的指南中,我们将要往其中添加一个功能-让仅仅订阅一个消息的子集成为可能. ...