小编Stu*_*air的帖子

html5 fileReader - 如何只读取文件的前N个字符?

目前我使用如下的模式来读取一系列文件的前3个字符:

var files = e.dataTransfer.files;
for (var i = 0, f; f = files[i]; i++) {
  var fr = new FileReader();
  fr.onload = function(e) { 
    var first_three_chars = e.target.result.substr(0,3);
  }
  fr.readAsText(f);
}
Run Code Online (Sandbox Code Playgroud)

麻烦的是我只对文件的前3个字符感兴趣,而这个方法读取整个文件,浪费了大量的内存和时间.如何快速迭代文件,只需快速查看第一个字符?

编辑:slice()是答案,谢谢sshen.我是这样做的:

var files = e.dataTransfer.files;
for (var i = 0, f; f = files[i]; i++) {
  var fr = new FileReader();
   fr.onloadend = function(e) {
    if (e.target.readyState == FileReader.DONE) {
      var first_three_chars = e.target.result;
    }
  };
  var blob = f.slice(0, 3);
  fr.readAsText(blob);
}
Run Code Online (Sandbox Code Playgroud)

javascript html5 filereader

16
推荐指数
1
解决办法
6162
查看次数

ruby popen3 - 如何重复写入stdin并读取stdout而无需重新打开过程?

我正在使用Open3popen3方法来启动一个以类似控制台/ REPL方式运行的进程,以反复接受输入和返回输出.

我可以打开进程,发送输入,并接收输出就好了,代码如下:

Open3.popen3("console_REPL_process") do |stdin, stdout, stderr, wait_thr|
    stdin.puts "a string of input"
    stdin.close_write
    stdout.each_line { |line| puts line } #successfully prints all the output
end
Run Code Online (Sandbox Code Playgroud)

我想连续多次这样做,而不需要重新打开过程,因为启动需要很长时间.

我知道我必须关闭stdin以便stdout返回..但我不知道的是,我如何重新打开'stdin以便我可以写更多输入?

理想情况下,我想做这样的事情:

Open3.popen3("console_REPL_process") do |stdin, stdout, stderr, wait_thr|
    stdin.puts "a string of input"
    stdin.close_write
    stdout.each_line { |line| puts line }

    stdin.reopen_somehow()

    stdin.puts "another string of input"
    stdin.close_write
    stdout.each_line { |line| puts line }
    # etc..
end
Run Code Online (Sandbox Code Playgroud)

感谢pmoo的回答,我能够使用PTY和设计一个解决方案,并expect期望当进程准备好输入时进程返回的提示字符串,如下所示:

PTY.spawn("console_REPL_process") do |output, input| …
Run Code Online (Sandbox Code Playgroud)

ruby popen3

9
推荐指数
1
解决办法
2562
查看次数

d3 - sunburst - 给出更新数据的过渡 - 尝试动画,而不是快照

我正在根据迈克博斯托克Zoomable Sunburst例子进行一场森伯斯特战争.

我希望能够使用全新的JSON(具有相同的结构但不同的'size'值)更改基础数据,并让sunburst为转换设置动画以反映更新的数据.

如果我使用.data()更改路径元素的数据,然后尝试以下列方式更新:

path.data(partition.nodes(transformed_json))
    .transition()
    .duration(750)
    .attrTween("d", arcTween(transformed_json));
Run Code Online (Sandbox Code Playgroud)

(..几乎与点击fn完全相同的代码)

function click(d) {
   path.transition()
       .duration(750)
       .attrTween("d", arcTween(d));
}
Run Code Online (Sandbox Code Playgroud)

..我发现sunburst确实正确地改变了以反映新数据,但它会卡入到位而不是平滑过渡,就像放大时一样.

http://jsfiddle.net/jTV2y/ < - 这是一个隔离问题的jsfiddle(点击'Run'后转换发生一秒钟)

我猜我需要创建一个不同的arcTween()fn,但我的d3理解还没有.非常感谢!

javascript d3.js sunburst-diagram

6
推荐指数
1
解决办法
2945
查看次数

Firefox - 仅在从Web Worker调用时才"定义FileReader"

在Firefox中,以下代码在主浏览器线程中正常运行时正常工作 -

var fr = new FileReader();
Run Code Online (Sandbox Code Playgroud)

..但是当从Web worker运行时,会抛出以下错误:

FileReader is not defined
Run Code Online (Sandbox Code Playgroud)

相同的代码在Chrome和Safari中运行良好.

在Firefox中支持Web worker的FileReader的任何建议?

javascript firefox filereader web-worker fileapi

6
推荐指数
1
解决办法
3393
查看次数