Belirli türde bir nesneyi ve PrintStream
yazdırılacak bir nesneyi alan ve bu nesnenin bir temsilini veren bir işlevim var. Bu işlevin çıktısını bir String'de nasıl yakalayabilirim? Özellikle, bir toString
yöntemde olduğu gibi kullanmak istiyorum .
Belirli türde bir nesneyi ve PrintStream
yazdırılacak bir nesneyi alan ve bu nesnenin bir temsilini veren bir işlevim var. Bu işlevin çıktısını bir String'de nasıl yakalayabilirim? Özellikle, bir toString
yöntemde olduğu gibi kullanmak istiyorum .
Yanıtlar:
ByteArrayOutputStream
Bir arabellek olarak kullanın :
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final String utf8 = StandardCharsets.UTF_8.name();
try (PrintStream ps = new PrintStream(baos, true, utf8)) {
yourFunction(object, ps);
}
String data = baos.toString(utf8);
PrintStream ps = new PrintStream(baos,true,"utf-8");
Karakter kümesi kaosundan kaçınmak için kullanmanızı öneririm
new String(baos.toByteArray(), java.nio.charset.StandardCharsets.UTF_8);
beri mevcut 1.7 , bu atmaz
ByteArrayOutputStream.close()
" hiçbir etkisi yoktur ", çünkü çöp toplayıcı tarafından ele alınacak destek dizisinin yanı sıra serbest bırakılacak kaynak yoktur.
ByteArrayOutputStream
vardır toString(String charsetName)
, ancak yalnızca String bağımsız değişkenini kabul eder. Ayrıca ByteArrayOutputStream'in senkronize edildiğini ve muhtemelen arzu edilmediğini unutmayın
Yapıcıya geçirilen bir ByteArrayOutputStream ile bir PrintStream oluşturabilirsiniz, bunu daha sonra PrintStream'e yazılan metni almak için kullanabilirsiniz.
ByteArrayOutputStream os = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(os);
...
String output = os.toString("UTF8");
Önceki cevapların bir birleşimi olan bu cevap Java 1.7 ve sonrası ile çalışır. Ayrıca, Akışları kapatmak için kod ekledim.
final Charset charset = StandardCharsets.UTF_8;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos, true, charset.name());
yourFunction(object, ps);
String content = new String(baos.toByteArray(), charset);
ps.close();
baos.close();
Belki bu soru size yardımcı olabilir: String'e bir OutputStream alın
Alt sınıf OutputStream ve PrintStream'e sarın
MyStrLine String değişkenini kullanarak bir girdi dizesi akışı oluşturan inSS adlı bir Tarayıcı değişkenini tanımlayın ve başlatın.
Ans: Tarayıcı inSS = yeni Tarayıcı (myStrLine);