我正在将文件上传到GoogleDrive的私有存储中。在肯定的情况下,此Java代码不会发出任何警告或错误,并且可以按预期工作。
// [START drive_android_create_file_in_appfolder]
private void createFileInAppFolder() {
final Task<DriveFolder> appFolderTask = getDriveResourceClient().getAppFolder();
final Task<DriveContents> createContentsTask = getDriveResourceClient().createContents();
Tasks.whenAll(appFolderTask, createContentsTask)
.continueWithTask(task -> {
DriveFolder parent = appFolderTask.getResult();
DriveContents contents = createContentsTask.getResult();
OutputStream outputStream = contents.getOutputStream();
try (Writer writer = new OutputStreamWriter(outputStream)) {
writer.write("Hello World!");
}
MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
.setTitle("New file")
.setMimeType("text/plain")
.setStarred(true)
.build();
return getDriveResourceClient().createFile(parent, changeSet, contents);
})
.addOnSuccessListener(this,
driveFile -> {
showMessage(getString(R.string.file_created,
driveFile.getDriveId().encodeToString()));
finish();
})
.addOnFailureListener(this, e -> {
Log.e(TAG, "Unable to create file", e);
showMessage(getString(R.string.file_create_error));
finish();
});
}
// [END drive_android_create_file_in_appfolder]
但是我在我的项目中使用了kotlin,因此复制将该函数粘贴到了我的代码中,现在几乎没有进行任何转换:
private fun createFileInAppFolder() {
val appFolderTask = mDriveResourceClient?.appFolder
val createContentsTask = mDriveResourceClient?.createContents()
Tasks.whenAll(appFolderTask, createContentsTask)
.continueWithTask { task ->
val parent = appFolderTask?.result
val contents = createContentsTask?.result
val outputStream = contents!!.outputStream
OutputStreamWriter(outputStream).use { writer -> writer.write(getJSONContent()) }
val changeSet = MetadataChangeSet.Builder()
.setTitle(Constants.BACKUP_FILE_NAME)
.setMimeType(Constants.BACKUP_FILE_MIME_TYPE)
.setStarred(true)
.build()
mDriveResourceClient?.createFile(parent!!, changeSet, contents)
}
.addOnSuccessListener { it ->
Log.e(TAG, "Created file id: ${it.driveId.encodeToString()}")
}.addOnFailureListener { it ->
Log.e(TAG, "Unable to create file: ${it.localizedMessage}")
}
}
然而,它在我的日志中以及在我上载例如3MB在GoogleDrive中大约变成9-12MB:
E/DataBuffer: Internal data leak within a DataBuffer object detected! Be sure to explicitly call release() on all DataBuffer extending objects when you are done with them. (internal object: com.google.android.gms.common.data.DataHolder@7ff040b)
所以我的问题是我该如何关闭打开的DataBuffer?