Skip to content

StringConversionSink.asStringSink() and asUtf8Sink() don't invalidate this #29353

@sgrekhov

Description

@sgrekhov

Please see StringConversionSink.asStringSink() documentation at https://api.dartlang.org/stable/1.22.1/dart-convert/StringConversionSink/asStringSink.html

ClosableStringSink asStringSink()
Returns this as a ClosableStringSink.

If used, this method must be the first and only call to this. It invalidates this. All further operations must be performed on the result.

Now look at the following code.

import "dart:convert";
main() {
  var outSink = new ByteConversionSink.withCallback((accumulated) {
    print(accumulated);
  });

  StringConversionSink inSink = UTF8.encoder.startChunkedConversion(outSink);
  inSink.add("1");

  ClosableStringSink css = inSink.asStringSink();
  css.write("2");
  inSink.add("3");
  css.close(); // prints [49, 50, 51]. It's encoded string "123"
  inSink.add("4");
  inSink.close(); // prints [49, 50, 51, 52]. It's encoded string "1234"
  inSink.add("5");
  inSink.close(); // prints [49, 50, 51, 52, 53]. It's encoded string "12345"
}

I don't see that asStringSink() invalidates anything.

The same is true for StringConversionSink.asUtf8Sink()

import "dart:convert";
main() {
  var outSink = new ByteConversionSink.withCallback((accumulated) {
    print(accumulated);
  });

  StringConversionSink inSink = UTF8.encoder.startChunkedConversion(outSink);
  inSink.add("1");

  ByteConversionSink bcs = inSink.asUtf8Sink(false);
  bcs.add([50]); // [50] is utf-8 encoding of 2
  inSink.add("3");
  bcs.close(); // prints [49, 50, 51]. It's encoded string "123"
  inSink.add("4");
  inSink.close(); // prints [49, 50, 51, 52]. It's encoded string "1234"
  inSink.add("5");
  inSink.close(); // prints [49, 50, 51, 52, 53]. It's encoded string "12345"
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    area-core-librarySDK core library issues (core, async, ...); use area-vm or area-web for platform specific libraries.core-alibrary-converttype-documentationA request to add or improve documentation

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions