SORU
15 Kasım 2010, PAZARTESİ


Guava İOUtils için eşdeğer.olabilirdi İnputStream)

Apache Commons IO IOUtils.toString() String InputStream okumak için güzel kullanışlı bir yöntem var.

Guava Apache Commons uzak ve hareket etmeye çalıştığım için: Guava içinde bir karşılığı var mıdır? com.google.common.io paketindeki tüm sınıfları baktım ve neredeyse bir şey gibi basit bir şey bulamadım.

Düzenleme:Anlıyorum ve karakter grupları ile sorunları takdir ediyorum. Tüm kaynaklarım ASCII (Evet, ASCII, ANSI vb.), biliyorum geldim! bu durumda, kodlama benim için bir sorun değil.

CEVAP
15 Kasım 2010, PAZARTESİ


Kullanacaktınız o Calum cevabı yorum belirtmiştir

CharStreams.toString(new InputStreamReader(supplier.get(), Charsets.UTF_8))

Bu kod aşırı yük CharStreams.toString(Readable) belirtir: çünkü sorunlu

Yakın değil Readable yapar.

Bu InputStreamReader, ve uzantısı InputStream supplier.get() tarafından geri gönderilen bu kodu tamamlandıktan sonra kapatılması anlamına gelir.

Eğer, diğer taraftan, size yararlanmak aslında o sana görünür zaten var InputSupplier<InputStream> ve kullanılan aşırı yük CharStreams.toString(InputSupplier<R extends Readable & Closeable>), toString yöntem olacaktır işlemek hem yaratma ve kapanış Reader.

Bu Jon, aslında giriş olarak InputStream alır CharStreams.newReaderSupplier herhangi bir aşırı yüklenme olmaması dışında önerilen Skeet tam olarak ne olduğunu... InputSupplier bir vermek zorunda:

InputSupplier<? extends InputStream> supplier = ...
InputSupplier<InputStreamReader> readerSupplier = 
    CharStreams.newReaderSupplier(supplier, Charsets.UTF_8);

// InputStream and Reader are both created and closed in this single call
String text = CharStreams.toString(readerSupplier);

InputSupplier noktası Guava try-finally çirkin bir blok kaynakları düzgün bir şekilde kapalı olduğundan emin olmak için gereken parçaları işlemek için izin vererek hayatınızı kolaylaştırmak için.

Düzenleme:Şahsen, aşağıdaki aslında yazmak istiyorum, sadece kod içinde yukarıdaki adımları bozuluyordu) buluyorum

String text = CharStreams.toString(
    CharStreams.newReaderSupplier(supplier, Charsets.UTF_8));

olmakfarbu daha ayrıntılı:

String text;
InputStreamReader reader = new InputStreamReader(supplier.get(), 
    Charsets.UTF_8);
boolean threw = true;
try {
  text = CharStreams.toString(reader);
  threw = false;
}
finally {
  Closeables.close(reader, threw);
}

Yazmak için bu düzgün kendini kontrol etmen ... ne daha fazla veya daha az.


Düzenleme: Şubat. 2014

InputSupplier OutputSupplier bu yöntemleri Guava 16.0 içinde bırakılmıştır. Yerlerini alanlarByteSource, CharSource, ByteSink ve CharSink. ByteSource artık String olarak içeriğini bir verilen bu gibi:

ByteSource source = ...
String text = source.asCharSource(Charsets.UTF_8).read();

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ChannelRichard

    ChannelRicha

    7 Kasım 2008
  • jonathepianist

    jonathepiani

    31 Temmuz 2008
  • wwjoshdu

    wwjoshdu

    18 ŞUBAT 2011