File.readBytes în Kotlin

Fișiere (kotlin.io) Kotlin 1.0 (JVM)

readBytes citește un fișier ca șir de octeți (ByteArray); writeBytes scrie octeți, pentru imagini, arhive sau date binare.

Sintaxă
fun File.readBytes(): ByteArray
fun File.writeBytes(array: ByteArray)
fun File.appendBytes(array: ByteArray)

Ce face File.readBytes

Nu toate fișierele sunt text: imaginile, PDF-urile și arhivele sunt binare. readBytes() citește tot fișierul ca un ByteArray, fără să încerce să-l interpreteze ca text. writeBytes(octeti) creează fișierul sau îi înlocuiește conținutul cu octeții dați, iar appendBytes adaugă la final.

Fiecare element al tabloului este un Byte, între -128 și 127. Pentru valoarea de la 0 la 255 folosește toInt() and 0xFF, iar pentru afișare în hexazecimal "%02x".format(b). Ca și readText, funcția încarcă tot fișierul în memorie.

Parametri

Parametru Descriere
array Pentru writeBytes/appendBytes: octeții scriși.

Ce returnează

readBytes: un ByteArray. Celelalte: nimic.

Exemple

Exemplul 1: Text salvat și citit ca octeți

„Brașov” are 6 caractere, dar 7 octeți în UTF-8, pentru că ș ocupă doi.

import java.io.File

fun main() {
    val f = File("oras.bin")
    f.writeBytes("Brașov".encodeToByteArray())
    val octeti = f.readBytes()
    println("Octeți: ${octeti.size}")
    println(octeti.joinToString(" ") { "%02x".format(it) })
    println(octeti.decodeToString())
}

Rezultat

Octeți: 7
42 72 61 c8 99 6f 76
Brașov

Exemplul 2: Recunoașterea unui fișier după primii octeți

Fișierele PNG încep mereu cu aceiași 8 octeți. Scriem un antet PNG și îl verificăm.

import java.io.File

fun main() {
    val semnaturaPng = byteArrayOf(0x89.toByte(), 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A)
    File("imagine.png").writeBytes(semnaturaPng + ByteArray(4))
    val inceput = File("imagine.png").readBytes().take(8).toByteArray()
    println("Este PNG: ${inceput.contentEquals(semnaturaPng)}")
    println("Dimensiune: ${File("imagine.png").length()} octeți")
}

Rezultat

Este PNG: true
Dimensiune: 12 octeți

Exemplul 3: Copierea unui fișier binar „de mână”

Citim toți octeții și îi scriem în alt fișier; conținutul este identic.

import java.io.File

fun main() {
    File("date.bin").writeBytes(ByteArray(10) { (it * 25).toByte() })
    val copie = File("copie.bin")
    copie.writeBytes(File("date.bin").readBytes())
    println(copie.readBytes().contentEquals(File("date.bin").readBytes()))
    println(copie.readBytes().map { it.toInt() and 0xFF })
}

Rezultat

true
[0, 25, 50, 75, 100, 125, 150, 175, 200, 225]

Greșeli frecvente

  • Citești o imagine cu readText() și o scrii înapoi cu writeText(). Conversia în text strică octeții; pentru fișiere binare folosește readBytes/writeBytes.
  • Te miri de valorile negative. Byte este cu semn; pentru 0–255 folosește it.toInt() and 0xFF.

Comenzi înrudite

  • String.encodeToByteArray: Transformă textul în octeți (bytes) folosind UTF-8; util pentru fișiere binare, rețea și sume de control.
  • File.copyTo: copyTo copiază un fișier în altă locație; deleteRecursively șterge un fișier sau un director cu tot conținutul.
  • File.readText: readText citește tot conținutul unui fișier ca String; writeText îl scrie (înlocuind tot), appendText adaugă la final.