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 cuwriteText(). Conversia în text strică octeții; pentru fișiere binare folosește readBytes/writeBytes. - Te miri de valorile negative.
Byteeste cu semn; pentru 0–255 foloseșteit.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.