javascript - 使用 nsIFileInputStream 和 nsIConverterInputStream 时加载的数据被 chop

标签 javascript firefox xpcom

我正在开发一个项目(BrowserIO - 如果您想查看代码并进行操作,请访问 browserio dot googlecode dot com。欢迎帮助!),其中我将 Firefox 的 nsIFileInputStream 与 nsIConverterInputStream 结合使用,根据他们的示例( https://developer.mozilla.org/en/Code_snippets/File_I%2F%2FO#Simple ),但仅加载完整数据的一部分。代码是:

var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(path);
var data = "";

var fstream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
var cstream = Components.classes["@mozilla.org/intl/converter-input-stream;1"].createInstance(Components.interfaces.nsIConverterInputStream);

fstream.init(file, -1, 0, 0);
cstream.init(fstream, "UTF-8", 0, 0); // you can use another encoding here if you wish

var str = {};
cstream.readString(-1, str); // read the whole file and put it in str.value
data = str.value;

cstream.close(); // this closes fstream

如果您想看到此行为,请从 BrowserIO 项目页面查看代码,并使用 Firebug 在 file_io.js 中的 data = str.value; 行设置断点。然后从列表中选择一个文本文件,然后单击“打开”按钮。在 Firebug 中,在监视面板中设置 str.value 的监视。看看文件...它应该被 chop ,除非它真的很短。

作为引用,上面的代码是 trunk/scripts/file_io.js 中 openFile() 函数的主体。

有人知道这是怎么回事吗?

最佳答案

参见nsIConverterInputStream ;基本上,-1 并不意味着“给我一切”,而是“给我默认金额”,文档声称是 8192。

更一般地说,如果您想耗尽输入流的内容,则必须循环直到它为空。任何流契约中的任何内容都不能保证调用返回的数据量是流的全部内容;如果需要的话,它甚至可以返回比立即可用的更少的值。

关于javascript - 使用 nsIFileInputStream 和 nsIConverterInputStream 时加载的数据被 chop ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1337303/

相关文章:

jquery - Chrome 的 offset() 返回选项的空值

firefox - Mozilla Addon-SDK 的存储选项

IDL 的 Eclipse 插件

javascript - Jquery Datetime 带有不同日期时间格式的计时器

javascript - 用于设置 SESSION 值的切换按钮

python - Selenium 打开浏览器但不加载页面

javascript - Web Worker 消耗大量内存

javascript - 堆积条形图的悬停不起作用

javascript - WordPress主题定制: CSS class not found

mozilla - 我应该链接 gecko 1.9.3 SDK 中的哪个库来使用 moz_xmalloc()?