Adds `EventSinkAdapter`, `StreamSinkAdapter`.

New classes are eplacement for `EventSinkBase`, `StreamSinkBase`,
which are deprecated, and `IOSinkBase` is deprecated with no
replacement. A replacement would belong in a different package.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 67d7be7..230367d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 2.8.2
+
+* Deprecate `EventSinkBase`, `StreamSinkBase`, `IOSinkBase`.
+* Add `EventSinkAdapter`, `StreamSinkAdapter`.
+
 ## 2.8.1
 
 * Don't ignore broadcast streams added to a `StreamGroup` that doesn't have an
diff --git a/lib/async.dart b/lib/async.dart
index 10e7fe7..ecee060 100644
--- a/lib/async.dart
+++ b/lib/async.dart
@@ -27,6 +27,7 @@
 export 'src/result/future.dart';
 export 'src/result/value.dart';
 export 'src/single_subscription_transformer.dart';
+export 'src/sink_adapter.dart';
 export 'src/sink_base.dart';
 export 'src/stream_closer.dart';
 export 'src/stream_completer.dart';
diff --git a/lib/src/sink_base.dart b/lib/src/sink_base.dart
index 873ce82..9a06ef5 100644
--- a/lib/src/sink_base.dart
+++ b/lib/src/sink_base.dart
@@ -14,6 +14,7 @@
 ///
 /// This takes care of ensuring that events can't be added after [close] is
 /// called.
+@Deprecated('Use EventSinkAdapter instead')
 abstract class EventSinkBase<T> implements EventSink<T> {
   /// Whether [close] has been called and no more events may be written.
   bool get _closed => _closeMemo.hasRun;
@@ -61,6 +62,7 @@
 ///
 /// This takes care of ensuring that events can't be added after [close] is
 /// called or during a call to [onStream].
+@Deprecated('Use StreamSinkAdapter instead')
 abstract class StreamSinkBase<T> extends EventSinkBase<T>
     implements StreamSink<T> {
   /// Whether a call to [addStream] is ongoing.
@@ -104,6 +106,7 @@
 ///
 /// This takes care of ensuring that events can't be added after [close] is
 /// called or during a call to [onStream].
+@Deprecated('Will be removed in version 2.9.0')
 abstract class IOSinkBase extends StreamSinkBase<List<int>> {
   /// See [IOSink.encoding] from `dart:io`.
   Encoding encoding;
diff --git a/test/io_sink_impl.dart b/test/io_sink_impl.dart
index 63fa289..bd761b9 100644
--- a/test/io_sink_impl.dart
+++ b/test/io_sink_impl.dart
@@ -2,6 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+@deprecated
+library io_sink_impl;
+
 import 'dart:io';
 
 import 'package:async/async.dart';
diff --git a/test/sink_base_test.dart b/test/sink_base_test.dart
index da3ca9f..8ecf8c3 100644
--- a/test/sink_base_test.dart
+++ b/test/sink_base_test.dart
@@ -2,6 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+@deprecated
+library sink_base_test;
+
 import 'dart:async';
 import 'dart:convert';