我有这段javascript代码
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath( this.savefile );
if ( file.exists() == false ) {
return null;
}
var is = Components.classes["@mozilla.org/network/file-input-stream;1"]
.createInstance( Components.interfaces.nsIFileInputStream );
is.init( file,0x01, 00004, null);
var sis = Components.classes["@mozilla.org/scriptableinputstream;1"]
.createInstance( Components.interfaces.nsIScriptableInputStream );
sis.init( is );
output = sis.read( sis.available() );
sis.close();
is.close();
this.filterData = output;
return output;
实际上我正在阅读的文件是一个二进制文件,可以说是350字节。 现在19字节为“零”,所以在上面的代码中我只得到输出中的18个字节。
当我尝试调试 sis.available 时会返回350.但是 sis.read 只能读取零字节。
我想要在输出中读取整个350字节的方式。
答案 0 :(得分:1)
修改强>
请参阅https://developer.mozilla.org/en-US/docs/Reading_textual_data
引用:
var charset = /* Need to find out what the character encoding is. Using UTF-8 for this example: */ "UTF-8";
var is = Components.classes["@mozilla.org/intl/converter-input-stream;1"]
.createInstance(Components.interfaces.nsIConverterInputStream);
// This assumes that fis is the nsIInputStream you want to read from
is.init(fis, charset, 1024, 0xFFFD);
is.QueryInterface(Components.interfaces.nsIUnicharLineInputStream);
if (is instanceof Components.interfaces.nsIUnicharLineInputStream) {
var line = {};
var cont;
do {
cont = is.readLine(line);
// Now you can do something with line.value
} while (cont);
}
这可以避免空字节问题,是unicode安全的,并且可以使用较少深奥的对象类型。
<强>原始强>
根据我上面的评论,并根据您的编辑,
请参阅https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIScriptableInputStream其中read()附带警告:如果数据包含空字节,则此方法将返回截断的字符串。您可能希望使用readBytes()。
或者,这是另一种方法:
var ph = Components.classes["@mozilla.org/network/protocol;1?name=file"]
.createInstance(Components.interfaces.nsIFileProtocolHandler);
var file_to_read = ph.getURLSpecFromFile(file);
var req = new XMLHttpRequest();
req.onerror = function(e) {
onError(e);
}
req.onreadystatechange = function() {
if (log.readyState == 4) {
//...
}
}
req.open("GET", file_to_read, true);
答案 1 :(得分:0)
我可能错了,但您是否尝试过发送一个简单的GET
请求?在AJAX?或者您是否真的想使用JS?
编辑: 请参阅此内容 - How do I load the contents of a text file into a javascript variable?