Ho un file Stringche 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
StringReaderclasse.
Puoi creare un java.io.Readercon java.io.StringReader, ma non ci sono adattatori per prendere un Readere 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 Stringin 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.