Hi, there.
I cannot put a ByteString into a ByteArray via a WriteStream anymore:
| s |
s := WriteStream on: ByteArray new.
s nextPutAll: 'hello'.
You need to do:
| s |
s := WriteStream on: ByteArray new.
s nextPutAll: 'hello' asByteArray.
This breaks code.
Best,
MarcelTechnically this is an expected error - you simply cannot put Characters (the elements of a String) into a ByteArray. However, for convenience we do support copying Strings into ByteArrays in various places, including WriteStream>>nextPutAll:. However, the test in WriteStream>>nextPutAll: is too strict. It needs to be "collection class isBits" instead of "collection isString". This makes the code actually match its comment:WriteStream>>nextPutAll: aCollection| newEnd |(collection class == aCollection classor: [ collection class isBitsand: [ aCollection isStringand: [ collection class format = aCollection class format ] ] ]) "Let Strings with the same field size as collection take the quick route too."ifFalse: [ ^ super nextPutAll: aCollection ].newEnd := position + aCollection size.newEnd > writeLimit ifTrue:[self growTo: newEnd + 10].collection replaceFrom: position+1 to: newEnd with: aCollection startingAt: 1.position := newEnd.^aCollectionWith that change your example works. I think this was the original intent of the code.Fixed in Collections-bf.787