【发布时间】:2012-08-30 15:38:38
【问题描述】:
我必须将数据写入Amazon S3,然后使用OutputStream 将数据写入其InputStream,如下所示
final PipedOutputStream outputStream = new PipedOutputStream();
final PipedInputStream inputStream;
try {
inputStream = new PipedInputStream(outputStream);
new Thread(
new Runnable() {
@Override
public void run() {
PutObjectRequest putObjectRequest = new PutObjectRequest(S3EnvironmentConfigurator.BucketTypes.source.name(), getProposalName(uniqueId), inputStream, null);
amazonS3Client.putObject(putObjectRequest);
try {
inputStream.close();
} catch (IOException e) {
}
}
}
).start();
现在amazonS3Client.putObject 看起来像
@Override
public PutObjectResult putObject(@Nonnull final PutObjectRequest putObjectRequest)
throws AmazonClientException, AmazonServiceException {
try {
InputStreamReader is = new InputStreamReader(new GZIPInputStream(putObjectRequest.getInputStream()));
StringBuilder sb=new StringBuilder();
BufferedReader br = new BufferedReader(is);
String read = br.readLine();
while(read != null) {
System.out.println(read);
read =br.readLine();
}
} catch (IOException e) {
//ignore
}
return super.putObject(putObjectRequest);
- 这当前会在控制台上打印出内容
需要
我该怎么做类似的事情
while (putObjectRequest.getInputStream() is not completely available) {
// wait
}
// write inputStream, the entire InputStream is ready and available for processing
【问题讨论】:
-
为什么需要等待?为什么不等待就不能开始处理?如果数据还没有准备好,当前线程会暂停,直到输入流有新数据。
-
为什么是管道?在这种情况下没有任何优势。只需在当前线程中执行所有 I/O。
标签: java amazon-s3 inputstream outputstream