0

私はこの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バイト全体を出力で読み取る方法が必要です。

4

2 に答える 2

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);
}

これにより、null バイトの問題が回避され、Unicode に対して安全であり、難解ではないオブジェクト型で動作します。

オリジナル:

上記の私のコメントによると、あなたの編集に照らして、

https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIScriptableInputStreamを参照してください。 read() には警告が付属しています: データに null バイトが含まれている場合、このメソッドは切り捨てられた文字列を返します。代わりに 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);
于 2013-02-15T09:39:12.173 に答える
0

私が間違っているかもしれませんが、簡単なGETリクエストを送信してみましたか? AJAXで?または、厳密に JS を使用しますか?

編集:これを参照してください-テキストファイルの内容をjavascript変数にロードするにはどうすればよいですか?

于 2013-02-15T09:24:58.970 に答える