查看Font#loadFont
的文档,我发现了这句话:
此方法不会关闭输入流。
不幸的是,这没有被解释或扩展。所以我的问题是:
API赢得和关闭输入流的原因是什么?您是否可能想重新使用该流? 我大多使用这种方法:
var matrix = [];
var keyWord = '[ARESTAS]';
if (window.File && window.FileReader && window.FileList && window.Blob) {
function readSingleFile(evt) {
var f = evt.target.files[0];
if (f) {
var r = new FileReader();
var contents = 'empty';
r.onload = function(e) {
contents = e.target.result;
var pastKey = false;
contents.split('\n').forEach(function(line, i) {
if (pastKey) {
var vals = line.trim().split(' ');
if (vals.length > 2) {
matrix.push(vals);
}
}
if (line.trim() === keyWord) {
pastKey = true;
}
})
}
r.readAsText(f);
} else {
alert("Failed");
}
}
document.getElementById('fileinput').addEventListener('change', readSingleFile, false);
} else {
alert('The File APIs are not fully supported by your browser.');
}
确保我的应用程序可以使用该字体,因此我从不重复使用输入流,而且我无法想到我想要的原因。
答案 0 :(得分:1)
涉及稀缺或外部资源(例如文件描述符或流)的每个API的文档将清楚地说明清理它的责任(在这种情况下,关闭流)。这有时被称为“所有权”。
在这种情况下,文档指出loadFont
方法不取得流的所有权。因此它仍然属于您:关闭流是您的责任。
try-with-resources语句是执行此操作的最佳方式。