2011-08-17 9 views

Odpowiedz

29

Chcesz SequenceInputStream i kilka ByteArrayInputStream s. Możesz użyć String.getBytes, aby utworzyć bajty dla tego ostatniego. SequenceInputStream jest stare, więc to trochę niezgrabne używać:

InputStream middle ; 
String beginning = "Once upon a time ...\n"; 
String end = "\n... and they lived happily ever after."; 
List<InputStream> streams = Arrays.asList(
    new ByteArrayInputStream(beginning.getBytes()), 
    middle, 
    new ByteArrayInputStream(end.getBytes())); 
InputStream story = new SequenceInputStream(Collections.enumeration(streams)); 

Jeśli masz dużo znaków dodać, a nie chcą konwertować je do bajtów masowo, można umieścić je w StringReader, a następnie użyj ReaderInputStream z Commons IO, aby odczytać je jako bajty. Ale aby to zrobić, musisz dodać Commons IO do swojego projektu. Dokładny kod dla tego jest pozostawiony jako ćwiczenie dla czytelnika.

+0

Więcej szczegółów, proszę? Dzięki za poręczne nazwy klas. – pqn

+2

Jeśli czytasz javadoc dla tych klas, jest to dość oczywiste. Skonstruuj pierwszy obiekt ByteArrayInputStream (nazwijmy go nagłówkiem) zawierający bajty początku, drugi zawierający bajty końca (nazwijmy go ogonem) i zbuduj ciąg SequenceInputStream z głowy, pierwotnego strumienia wejściowego i ogona. –

+0

Dziękujemy! Udało mi się teraz to zrobić. – pqn

0

1 Utwórz nowy OutputStream, poparty tablicą bajtów, zgodnie z sugestią Grega.
2 Napisz początkowe znaki do nowego OutputStream.
3 Skopiuj istniejącą wersję InputStream do nowego urządzenia OutputStream.
4 Napisz znaki kończące do nowego OutputStream.
5 Zamknij nowy OutputStream, uważając, aby zachować tablicę tylną.
6 Otwórz szufladę jako nowy InputStream.

Daj nam znać, jeśli masz problem z którymkolwiek z tych kroków.

+0

Jak pisać znaki do obiektu InputStream? –

+0

-1, Napisz końcowe znaki do nowego InputStream. -> nie możesz pisać znaków do InputStream – GBa

+0

Whoops! Ponownie uruchamia mózg. Napisz do strumienia wyjściowego, wspieranego przez tablicę bajtów, jak mówi Greg. Wyodrębnij tablicę i otwórz ponownie jako strumień wejściowy. Dziękuję za poprawienie mnie. – rossum

Powiązane problemy