Ho un file String
che voglio usare come file InputStream
. In Java 1.0, potresti usare java.io.StringBufferInputStream
, ma è stato @Deprecrated
(con una buona ragione - non puoi specificare la codifica del set di caratteri):
Questa classe non converte correttamente i caratteri in byte. A partire da JDK 1.1, il modo preferito per creare un flusso da una stringa è tramite la
StringReader
classe.
Puoi creare un java.io.Reader
con java.io.StringReader
, ma non ci sono adattatori per prendere un Reader
e creare un file InputStream
.
Ho trovato un antico bug che chiedeva un sostituto adatto, ma non esiste nulla del genere, per quanto ne so.
La soluzione alternativa suggerita è quella di 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 ciò significa materializzare l'intero String
in memoria come un array di byte e vanifica 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 minor numero possibile di dati venga (ri) materializzato nella memoria.