Node.js で stream を使うとき デフォルトだと Buffer として受け取ります

const stream = require("stream")
const timer = require("timers/promises")

const readable = new stream.Readable({
read() {},
})

readable.on("data", chunk => {
console.log(chunk)
})
readable.on("end", () => {
console.log("END")
})

const push = async () => {
await timer.setTimeout(1000)
readable.push(Buffer.from("abc"))
await timer.setTimeout(1000)
readable.push(Buffer.from("def"))
await timer.setTimeout(1000)
readable.push(null)
}
push()
<Buffer 61 62 63>
<Buffer 64 65 66>
END

文字列が欲しいときは Buffer の toString で変換できます
そういうコードを結構見かけます
データを受け取るたび toString した文字列を結合していって最終的な文字列を作ってたりです
でもこれが安全なのは英語圏だけです
日本語などのマルチバイト文字のときに問題が起きます

たとえば日本語の「あ」「い」「う」は UTF-8 ではこういう 3 バイトで表現されます

あ: 227, 129, 130
い: 227, 129, 132
う: 227, 129, 134

stream では基本的に複数のチャンクに分割されています
分割される場所が 1 文字の途中だった場合はこうなります

const stream = require("stream")
const timer = require("timers/promises")

const readable = new stream.Readable({
read() {},
})

readable.on("data", chunk => {
console.log(chunk, chunk.toString())
})
readable.on("end", () => {
console.log("END")
})

const push = async () => {
await timer.setTimeout(1000)
readable.push(Buffer.from([227, 129, 130, 227])) // い の 1 バイト目まで
await timer.setTimeout(1000)
readable.push(Buffer.from([129, 132, 227, 129, 134])) // い の 2 バイト目から
await timer.setTimeout(1000)
readable.push(null)
}
push()
<Buffer e3 81 82 e3> あ�
<Buffer 81 84 e3 81 86> ��う
END

不正なデータとなり 「い」 のそれぞれのバイトが 1 文字の�とされています
こういうことがあるので全部受け取ってから Buffer を結合後に文字列化したほうが安全です
でも streaming 的に処理したい場合は最後を待ってられないです
こういうときは encoding を utf-8 にしておくと 受け取るデータが最初から文字列になってるだけじゃなくてマルチバイト文字の切れ目もうまく扱ってくれます

const stream = require("stream")
const timer = require("timers/promises")

const readable = new stream.Readable({
encoding: "utf-8", // ←追加
read() {},
})

readable.on("data", chunk => {
console.log(chunk)
})
readable.on("end", () => {
console.log("END")
})

const push = async () => {
await timer.setTimeout(1000)
readable.push(Buffer.from([227, 129, 130, 227])) // い の 1 バイト目まで
await timer.setTimeout(1000)
readable.push(Buffer.from([129, 132, 227, 129, 134])) // い の 2 バイト目から
await timer.setTimeout(1000)
readable.push(null)
}
push()

いう
END