InputStream to String Kotlinban

1. Áttekintés

Ebben a rövid bemutatóban megtudhatjuk, hogyan kell elolvasni egy InputStream ba be Húr.

Kotlin egyszerű módot kínál az átalakítás végrehajtására. Az erőforrásokkal való munkában azonban még mindig figyelembe kell venni néhány árnyalatot. Ráadásul kitérünk a speciális esetekre, például stop karakterig olvasható.

2. Pufferolt olvasó

InputStream absztrakció a rendezett bájtfolyam körül. Az alapul szolgáló adatforrás lehet fájl, hálózati kapcsolat vagy bármely más bájtokat kibocsátó forrás. Használjunk egy egyszerű fájlt, amely a következő adatokat tartalmazza:

A számítógépes programozás gondot okozhat Olyan, mintha megpróbálnánk egy védett várat elvenni

Az első megoldás, amelyet megpróbálhatunk, a fájl manuális elolvasása soronként:

val olvasó = BufferedReader (inputStream.reader ()) val content = StringBuilder () próbáld ki a {var line = reader.readLine () while (line! = null) {content.append (line) line = reader.readLine ()}} végül {reader.close ()}

Először a BufferedReader osztályba csomagolni a InputStream majd addig olvasott, amíg egyetlen sor sem maradt a patakban. Ezenkívül körülvettük az olvasási logikát a próbálkozz végre nyilatkozat a zárja be végül a patakot. Összességében rengeteg kazán kód van.

Kompaktabbá és olvashatóbbá tehetnénk?

Teljesen! Eleinte egyszerűsíthetjük a részletet a readText () funkció. A bemeneti adatfolyamot teljesen a-ként olvassa fel Húr. Ennek megfelelően a részleteket a következőképpen alakíthatjuk át:

val reader = BufferedReader (inputStream.reader ()) var content: String try {content = reader.readText ()} végül {reader.close ()}

Ez azonban még mindig megvan próbálkozz végre Blokk. Szerencsére Kotlin lehetővé teszi az erőforrások kezelésének általa történő automatizálását. Nézzük meg a következő kódsorokat:

val content = inputStream.bufferedReader (). use (BufferedReader :: readText) assertEquals (fileFullContent, content) 

Ez az egyvonalas megoldás egyszerűnek tűnik, ennek ellenére sok minden történik a motorháztető alatt. A fenti kód egyik fontos pontja a használat() funkció. Ez a kiterjesztési függvény végrehajt egy blokkot egy erőforráson, amely végrehajtja a Bezárható felület. Végül, amikor a blokk végrehajtásra kerül Kotlin bezárja helyettünk az erőforrást.

3. Stop karakter

Ugyanakkor előfordulhat olyan eset, amikor szükségünk van rá tartalmat olvashat egy meghatározott karakterig. Határozzunk meg egy kiterjesztési függvényt a InputStream osztály:

fun InputStream.readUpToChar (stopChar: Char): String {val stringBuilder = StringBuilder () var currentChar = this.read (). toChar () while (currentChar! = stopChar) {stringBuilder.append (currentChar) currentChar = this.read ( ) .toChar () if (this.available () <= 0) {stringBuilder.append (currentChar) break}} return stringBuilder.toString ()}

Ez a függvény egy bájtot olvas be egy bemeneti adatfolyamból, amíg egy stop karakter meg nem jelenik. Ugyanakkor rendben a végtelen hurok megakadályozása érdekében a elérhető() módszer hogy ellenőrizze, hogy van-e a streamben adat. Tehát, ha egy patakban nincs stop karakter, akkor egy egész folyam lesz olvasható.

Másrészt a InputStream osztály nyújt megvalósítást a elérhető() módszer. Következésképpen a kiterjesztés függvény használata előtt meg kell győződnünk a módszer helyes végrehajtásáról.

Térjünk vissza a példánkra és olvassa el a szöveget az első szóközig (‘ ‘):

val content = inputStream.use {it.readUpToChar ('')} assertEquals ("Számítógép", tartalom) 

Ennek eredményeként megkapjuk a szöveget a stop karakterig. Ugyanígy ne felejtsd el tekerje be a blokkot a használat() funkció az adatfolyam automatikus bezárásához.

4. Következtetés

Ebben a cikkben azt láttuk, hogyan lehet konvertálni egy InputStream a Húr Kotlinban. Kotlin tömör módon biztosítja az adatfolyamokkal való munkát, de mindig érdemes tudni, mi folyik belsőleg.

Szokás szerint mindezek a példák a Githubon befejeződtek.