我正在使用Google Cloud Storage客户端库将文件存储在Google Cloud Storage中。 我为此使用以下代码:
WriteChannel writer = null;
ReadableByteChannel input=null;
try {
int bufferSize = Integer.getInteger("buffer.size", 1024 * 1024);
writer = storageClient.writer(blobInfo);
//the fileInputStream from the file
input = Channels.newChannel(fileInputStream);
ByteBuffer buffer = ByteBuffer.allocateDirect(bufferSize);
writer.setChunkSize(5*bufferSize);
while (input.read(buffer) != -1) {
buffer.flip();
writer.write(buffer);
buffer.compact();
}
}
IOUtils.closeQuietly(fileInputStream);
IOUtils.closeQuietly(writer);
IOUtils.closeQuietly(input);
由于建议用于大文件的文档应使用存储客户端中的WriteChannel writer。 但是使用此代码后,在某些请求或并行请求之后,它将产生内存错误。
我不明白为什么代码没有进行流传输,并且每个请求和内存的分配内存都没有释放,这很快就会导致内存泄漏错误。
如果我做错了事,请帮助并指导我。
谢谢。