From 53a01ecc125f2a0bf651a3f495b0d37a1c30aa3b Mon Sep 17 00:00:00 2001 From: Oliver Schulz Date: Wed, 2 May 2012 22:19:09 +0200 Subject: [PATCH] Added a java.io.OutputStream wrapper to ByteStringBuilder --- .../src/main/scala/akka/util/ByteString.scala | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/akka-actor/src/main/scala/akka/util/ByteString.scala b/akka-actor/src/main/scala/akka/util/ByteString.scala index 5ce80b0549..d75fb01374 100644 --- a/akka-actor/src/main/scala/akka/util/ByteString.scala +++ b/akka-actor/src/main/scala/akka/util/ByteString.scala @@ -424,6 +424,15 @@ sealed abstract class CompactByteString extends ContByteString with Serializable object ByteStringBuilder { def apply(initialSize: Int = 0): ByteStringBuilder = new ByteStringBuilder(initialSize) + + /** + * An OutputStream that directly wraps a ByteStringBuilder. + */ + class OutputStreamWrapper(val builder: ByteStringBuilder) extends java.io.OutputStream { + def write(b: Int) = builder += b.toByte + + override def write(b: Array[Byte], off: Int, len: Int) { builder.putBytes(b, off, len) } + } } /** @@ -526,4 +535,9 @@ final class ByteStringBuilder extends Builder[Byte, ByteString] { ByteStrings(bytestrings, _length) } + /** + * Directly wraps this ByteStringBuilder in an OutputStream. Write + * operations on the stream are forwarded to the builder. + */ + def asOutputStream = new ByteStringBuilder.OutputStreamWrapper(this) }