I know this is probably possible using Streams, but I wasn\'t sure the correct syntax.
I would like to pass a string to the Save method and have it gzip the string and u
I would use something like the following:
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
GZipOuputStream gzipOut = new GZipOutputStream(byteOut);
// write your stuff
byte[] bites = byteOut.toByteArray();
//write the bites to the amazon stream
You are writing the zipped values out to the byte stream, then taking the byte values, you can write those to your other stream. You can also wrap the stream to the amazon site (i.e. the output stream from the http connection or something similar) and avoid the whole ByteArrayOutputStream.
Edit: I noticed your last sentence - bleah. You can take the bytes you created, create a ByteArrayInputStream with them, and then pass that in as an input stream:
ByteArrayInputStream byteInStream = new ByteArrayInputStream(bites);
It should read from the input stream to the output stream, if I am understanding what you are describing correctly. Otherwise, you can simply write to the output stream.
This is essentially what aperkins suggested. I don't know the interface to AS3, so his suggestion to create a ByteArrayInputStream over the byte array is probably the way to go.
import java.io.*;
import java.util.zip.GZIPOutputStream;
import com.amazonaws.auth.PropertiesCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.PutObjectRequest;
public class FileStore {
public static void Save(String data) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Writer writer = new OutputStreamWriter(baos);
writer.write(data);
writer.flush();
writer.close();
byte[] zippedBytes = gzipFile(baos.toByteArray());
AmazonS3 s3 = new AmazonS3Client(new PropertiesCredentials(
new FileInputStream("AwsCredentials.properties")));
String bucketName = "mybucket";
String key = "test/" + zippedFile.getName();
s3.putObject(new PutObjectRequest(bucketName, key,
new ByteArrayInputStream(zippedBytes));
}
public static byte[] gzipFile(byte[] bytes) throws IOException {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
GZIPOutputStream out = new GZIPOutputStream(baos);
out.write(bytes, 0, bytes.length);
// Complete the GZIP file
out.finish();
out.close();
return baos.toByteArray();
} catch (IOException e) {
throw e;
}
}
}