Ho un String
che voglio usare come InputStream
. In Java 1.0, è possibile utilizzare java.io.StringBufferInputStream
, ma che è stato @Deprecrated
(con buona ragione - non è possibile specificare la codifica del set di caratteri):Come posso ottenere un java.io.InputStream da una java.lang.String?
Questa classe non converte correttamente caratteri in byte. A partire da JDK 1.1, , il modo migliore per creare uno stream da una stringa è tramite la classe
StringReader
.
è possibile creare un java.io.Reader
con java.io.StringReader
, ma non ci sono gli adattatori per fare una Reader
e creare un InputStream
.
Ho trovato un ancient bug per chiedere un sostituto adatto, ma non esiste nulla di simile - per quanto posso dire.
La soluzione spesso suggerita consiste nell'utilizzare java.lang.String.getBytes()
come input per java.io.ByteArrayInputStream
:
public InputStream createInputStream(String s, String charset)
throws java.io.UnsupportedEncodingException {
return new ByteArrayInputStream(s.getBytes(charset));
}
ma che significa materializzando l'intero String
in memoria come un array di byte, e sconfigge lo scopo di un flusso. Nella maggior parte dei casi questo non è un grosso problema, ma stavo cercando qualcosa che preservasse l'intento di un flusso: che il minimo possibile di dati sia (ri) materializzato nella memoria.
@djb L'ha fatto. –