Skip to content

Instantly share code, notes, and snippets.

@bseib
Created September 3, 2020 14:53
Show Gist options
  • Save bseib/79bb7b397fdb9842d1a00d08f18f0200 to your computer and use it in GitHub Desktop.
Save bseib/79bb7b397fdb9842d1a00d08f18f0200 to your computer and use it in GitHub Desktop.
A clean way to consume an input stream into a buffer using a sequence
fun inputStreamToTrimmedString(inputStream: InputStream): String {
val baos = ByteArrayOutputStream()
val buffer = ByteArray(128)
inputStream.bufferedSequence(buffer) { bytesRead -> baos.write(buffer, 0, bytesRead) }
return baos.toString("UTF-8").trim()
}
import java.io.InputStream
fun InputStream.bufferedSequence(buffer: ByteArray, action: (bytesRead: Int) -> Unit) {
this.use { inputStream ->
generateSequence {
when (val bytesRead = inputStream.read(buffer)) {
-1 -> null
else -> bytesRead
}
}.forEach(action)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment