Performance: use byte array buffer directly to read the entire contents of a file.
#KT-14883 Fixed
This commit is contained in:
@@ -49,7 +49,18 @@ public inline fun File.printWriter(charset: Charset = Charsets.UTF_8): PrintWrit
|
|||||||
*
|
*
|
||||||
* @return the entire content of this file as a byte array.
|
* @return the entire content of this file as a byte array.
|
||||||
*/
|
*/
|
||||||
public fun File.readBytes(): ByteArray = FileInputStream(this).use { it.readBytes(length().toInt()) }
|
public fun File.readBytes(): ByteArray = FileInputStream(this).use { input ->
|
||||||
|
var offset = 0
|
||||||
|
var remaining = this.length().toInt() // TODO: toIntExact()
|
||||||
|
val result = ByteArray(remaining)
|
||||||
|
while (remaining > 0) {
|
||||||
|
val read = input.read(result, offset, remaining)
|
||||||
|
if (read < 0) break
|
||||||
|
remaining -= read
|
||||||
|
offset += read
|
||||||
|
}
|
||||||
|
if (remaining == 0) result else result.copyOf(offset)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the content of this file as an [array] of bytes.
|
* Sets the content of this file as an [array] of bytes.
|
||||||
|
|||||||
Reference in New Issue
Block a user