为什么没有'loadFont`关闭输入流?我应该关闭吗?

时间:2016-07-04 17:22:31

标签: java javafx inputstream

查看Font#loadFont的文档,我发现了这句话:

  

此方法不会关闭输入流。

不幸的是,这没有被解释或扩展。所以我的问题是:

  1. 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.');
    }
    

    确保我的应用程序可以使用该字体,因此我从不重复使用输入流,而且我无法想到我想要的原因。

  2. 我应该自己关闭输入流吗?如果我没有关闭输入流,我应该期待任何问题吗? 在过去,我遇到过以这种方式加载字体的问题,其中一些使用此字体配置的标签开始显示正方形,而其他标签(在同一场景中!)保持正常工作。这可能与不关闭输入流有关吗?

1 个答案:

答案 0 :(得分:1)

涉及稀缺或外部资源(例如文件描述符或流)的每个API的文档将清楚地说明清理它的责任(在这种情况下,关闭流)。这有时被称为“所有权”。

在这种情况下,文档指出loadFont方法不取得流的所有权。因此它仍然属于您:关闭流是您的责任。

try-with-resources语句是执行此操作的最佳方式。