【问题标题】:Reading text file using readAsString() and using the result使用 readAsString() 读取文本文件并使用结果
【发布时间】:2013-05-13 22:38:34
【问题描述】:

以下示例 (1) 读取文件并打印内容,但未将文件内容显式分配给变量(即“.then(stdout.write)”)。但是,如果我想做的不仅仅是打印内容(2),我需要将内容分配给一个变量(我认为)。

是否可以在不将文件文本分配给变量的情况下实现这一点(打印内容并做更多事情)?

在第一个示例中,是否创建了隐式变量?或者,换句话说,example1 是否通过不创建显式变量来使用更少的资源?

//Example 1:
import 'dart:io';
void main() {
  new File(new Options().script)
    .readAsString(encoding: Encoding.ASCII)
    .then(stdout.write)
    .catchError((oError) => print(oError));
  print("Reading file ...\n");
}

//Example 2:
import 'dart:io';
void main() {
  new File(new Options().script)
    .readAsString(encoding: Encoding.ASCII)
    .then((String sText) {
      stdout.write(sText+"\n\n");
      print ('Completed');
    })
    .catchError((oError) => print(oError));
  print("Reading file ...\n");
}

【问题讨论】:

  • 您可以通过删除 catchError 的方法级联来简化代码。通常,链接来自 Future 的调用以确保 Future 的结果和/或错误正确传播。我会更新你的代码。
  • 谢谢,我再看看。

标签: dart dart-io


【解决方案1】:

在第一个例子中,这个:

.then(stdout.write)

等价于:

.then((String sText) {
  stdout.write(sText);
})

从技术上讲,还有一个函数调用,并且您还有一个变量,这应该会花费您几个字节(我不确定确切的实现方式)。字符串是不可变的;您只收到对字符串的引用,因此您不会通过使用第二个版本来节省资源(除了函数调用和几个字节的内存)。

当然,无论你想对字符串的内容做什么,都可能涉及到资源的使用,但除非文件很大,否则这应该不是问题。

【讨论】:

  • 我怀疑是否存在内存或性能差异。优化器应该能够删除额外的函数调用。但是,额外的字符串连接会略有不同。
猜你喜欢
  • 2018-11-02
  • 1970-01-01
  • 2021-08-12
  • 1970-01-01
  • 1970-01-01
  • 2014-06-13
  • 2016-04-25
  • 1970-01-01
  • 2012-02-16
相关资源
最近更新 更多