Without knowing where your AsyncStream is getting its data, I can only make some guesses. It might be that your data source only sends data in frames of 128 bytes. If you know your data is going to be interpreted as text, you might be better off using the AsyncStreamsText class. It collects frames of raw bytes until it reads a newline character and then raises the _NewText(Text as String) event. This allows you not to bother with collecting byte buffers and turning them into text and just deal with the text directly, as a String.
Also, are you sure ASCII is a supported character set? I seem to recall ASCII was deprecated a while ago and it is now considered a subset of UTF-8.
Furthermore, I'm not sure what the mapping is between UTF-8/ASCII and UTF-16 is but I know Java stores Strings internally as UTF-16 (that's why char is 16-bit). Even though you specified that BytesToString use ASCII, the resulting String s will still be represented in UTF-16. So when you call Asc(c), this value (which is of int type) could easily overflow the limits of the byte type. Like Random said, if you just need the bytes, you should just work with them directly. If you need Strings, you should use the AsyncStreamsText class.