Könnyű módszerek Java InputStream írásához OutputStream-be

1. Áttekintés

Ebben a gyors bemutatóban megtanuljuk, hogyan kell Java-t írni InputStream Java-ra OutputStream. Először a Java 8 és a Java 9 alapvető funkcióit használjuk. Ezután megnézünk néhány külső könyvtárat - a Guava és az Apache Commons IO könyvtárakat.

A Java 9, a Guava és az Apache Commons IO által biztosított segédprogramok nem ölik le vagy zárják le az adatfolyamokat. Tehát ezeket az erőforrásokat a használatával kell kezelnünk erőforrásokkal próbálkozzon vagy a végül Blokk.

2. A Java 8 használata

Először egy egyszerű módszer létrehozásával kezdjük a vanília Java használatával a tartalom másolását a InputStream hoz OutputStream:

void copy (InputStream forrás, OutputStream cél) dobja az IOException {byte [] buf = new byte [8192]; int hossza; while ((hossz = forrás.olvasott (buf))> 0) {target.write (buf, 0, hossz); }}

Ez a kód elég egyszerű - egyszerűen beolvassunk néhány bájtot, majd kiírjuk őket.

3. A Java 9 használata

A Java 9 egy segédprogram-módszert biztosít, InputStream.transferTo (), erre a feladatra.

Nézzük meg, hogyan használnánk a transferTo () módszer:

@Test public void givenUsingJavaNine_whenCopyingInputStreamToOutputStream_thenCorrect () dobja az IOException-t {String initialString = "Hello World!"; try (InputStream inputStream = new ByteArrayInputStream (initialString.getBytes ()); ByteArrayOutputStream targetStream = new ByteArrayOutputStream ()) {inputStream.transferTo (targetStream); assertEquals (initialString, új String (targetStream.toByteArray ())); }}

Ne feledje, hogy ha fájlfolyamokkal dolgozik, hatékonyabb használni Files.copy () mint a transferTo () módszer.

4. Guava használata

Ezután nézzük meg, hogyan tennénk használja Guava hasznossági módszerét ByteStreams.copy ().

Be kell építenünk a guava-függőséget pom.xml:

 com.google.guava guava 29.0-jre 

Készítsünk egy egyszerű tesztesetet, hogy bemutassuk, hogyan tudnánk felhasználni ByteStreams adatok másolása:

@Test public void givenUsingGuava_whenCopyingInputStreamToOutputStream_thenCorrect () dobja az IOException-t {String initialString = "Hello World!"; try (InputStream inputStream = new ByteArrayInputStream (initialString.getBytes ()); ByteArrayOutputStream targetStream = new ByteArrayOutputStream ()) {ByteStreams.copy (inputStream, targetStream); assertEquals (initialString, új String (targetStream.toByteArray ())); }}

5. A Commons IO használata

Végül nézzük meg, hogyan tennénk használja a Commons IO-t IOUtils.copy () módszer erre a feladatra.

Természetesen hozzá kell adnunk a commons-io függőséget a pom.xml:

 commons-io commons-io 2.7 

Hozzunk létre egy egyszerű tesztesetet a IOUtils adatok másolása a bemeneti adatfolyamból a kimeneti adatfolyamba:

@Test public void givenUsingCommonsIO_whenCopyingInputStreamToOutputStream_thenCorrect () dobja az IOException-t {String initialString = "Helló világ!"; try (InputStream inputStream = new ByteArrayInputStream (initialString.getBytes ()); ByteArrayOutputStream targetStream = new ByteArrayOutputStream ()) {IOUtils.copy (inputStream, targetStream); assertEquals (initialString, új String (targetStream.toByteArray ())); }}

Megjegyzés: A Commons IO további módszereket biztosít a munkához InputStreams és OutputStreams. IOUtils.copyLarge () akkor kell használni, amikor 2 GB vagy annál több adatot kell lemásolni.

6. Következtetés

Ebben a cikkben egyszerű módszereket tártunk fel másolja az adatokat egy InputStream egy OutputStream.

Ezeknek a példáknak a megvalósítása elérhető a GitHub oldalon.


$config[zx-auto] not found$config[zx-overlay] not found