diff --git a/actor-tests/src/test/scala/org/apache/pekko/util/ByteStringSpec.scala b/actor-tests/src/test/scala/org/apache/pekko/util/ByteStringSpec.scala index 78797f5239..9a3b30980c 100644 --- a/actor-tests/src/test/scala/org/apache/pekko/util/ByteStringSpec.scala +++ b/actor-tests/src/test/scala/org/apache/pekko/util/ByteStringSpec.scala @@ -814,6 +814,13 @@ class ByteStringSpec extends AnyWordSpec with Matchers with Checkers { } } + "created from iterator" in { + check { (a: ByteString) => + val asIterator = a.iterator + ByteString(asIterator) == a + } + } + "compacting" in { check { (a: ByteString) => val wasCompact = a.isCompact diff --git a/actor/src/main/scala-2.12/org/apache/pekko/util/ByteString.scala b/actor/src/main/scala-2.12/org/apache/pekko/util/ByteString.scala index 26d2e93c32..c891604f72 100644 --- a/actor/src/main/scala-2.12/org/apache/pekko/util/ByteString.scala +++ b/actor/src/main/scala-2.12/org/apache/pekko/util/ByteString.scala @@ -39,6 +39,11 @@ object ByteString { */ def apply(bytes: Byte*): ByteString = CompactByteString(bytes: _*) + /** + * Creates a new ByteString by iterating over bytes. + */ + def apply(bytes: Iterator[Byte]): ByteString = CompactByteString(bytes) + /** * Creates a new ByteString by converting from integral numbers to bytes. */ @@ -945,6 +950,14 @@ object CompactByteString { } } + /** + * Creates a new CompactByteString by traversing bytes. + */ + def apply(bytes: Iterator[Byte]): CompactByteString = { + if (bytes.isEmpty) empty + else ByteString.ByteString1C(bytes.toArray) + } + /** * Creates a new CompactByteString by converting from integral numbers to bytes. */