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 ...
随机推荐
- C++RAII
http://baike.baidu.com/view/1120455.htm?fr=aladdin http://www.cnblogs.com/gnuhpc/archive/2012/12/04/ ...
- 在Hadoop伪分布式模式下安装Hive(derby,mysql)
我的Hadoop版本是1.2.0,mysql版本是5.6.12. 先介绍一下嵌入式derby模式: 1.下载/解压 在hive官网上选择要下载的版本,我选择的版本是hive-0.10.0. 下载好解压 ...
- 排序 归并排序&逆序对
void MergeArray(int cry[],int temp[],int begin,int middle,int end) { int i=begin; int j=middle+1; in ...
- 浅谈PHP自动化代码审计技术
原文出处: exploit 欢迎分享原创到伯乐头条 0×00 由于博客实在没什么可以更新的了,我就把目前做的事情总结一下,当做一篇博客,主要是谈一谈项目中所运用的一些技术.目前市面上有不少PHP的 ...
- php整理(四): mysql
PHP学习(四)---PHP与数据库MySql 主要有以下的内容: 1.怎么连接数据库 2.怎么操作数据库 (1)怎么执行sql语言 (2)怎么处理返回的结果集 方法一:面向过程(已经过时,只是了解) ...
- group by的SQL语句
有一张项目表 CREATE TABLE [ProjectTable] ( [ProjectID] NVARCHAR(16) NOT NULL, [ProjectName] NVARCHAR(20) N ...
- SecureCRT访问开发板linux系统
前言: 最近在用OK6410开发板跑linux系统,经常在终端上敲一些指令,无奈开发板屏幕太小用起来非常不方便,所以使用终端一款能运行在windows上的软件与开发板连接,直接在电脑上操作开发板了,这 ...
- java6 新特新
JAVA6新特性介绍 1. 使用JAXB来实现对象与XML之间的映射 JAXB是Java Architecture for XML Binding的缩写,可以将一个Java对象转变成为XML格式, ...
- VB获取浏览器版本
String userAgent; userAgent = Request.UserAgent; ) { // The browser is Microsoft Internet Explorer V ...
- POJ 3253 Fence Repair【二叉堆】
题意:给出n根木板,需要把它们连接起来,每一次连接的花费是他们的长度之和,问最少需要多少钱. 和上一题果子合并一样,只不过这一题用long long 学习的手写二叉堆的代码,再好好理解= = #inc ...