ฉันมีฟังก์ชั่นที่รับวัตถุประเภทหนึ่งและ a PrintStream
ที่จะพิมพ์และแสดงผลการเป็นตัวแทนของวัตถุนั้น ฉันจะจับเอาท์พุทของฟังก์ชันนี้ในสตริงได้อย่างไร? โดยเฉพาะฉันต้องการใช้เป็นtoString
วิธีการ
ฉันมีฟังก์ชั่นที่รับวัตถุประเภทหนึ่งและ a PrintStream
ที่จะพิมพ์และแสดงผลการเป็นตัวแทนของวัตถุนั้น ฉันจะจับเอาท์พุทของฟังก์ชันนี้ในสตริงได้อย่างไร? โดยเฉพาะฉันต้องการใช้เป็นtoString
วิธีการ
คำตอบ:
ใช้ a ByteArrayOutputStream
เป็นบัฟเฟอร์:
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");
เพื่อหลีกเลี่ยงความสับสนวุ่นวาย
new String(baos.toByteArray(), java.nio.charset.StandardCharsets.UTF_8);
มีตั้งแต่1.7ก็ไม่ได้โยน
ByteArrayOutputStream.close()
" ไม่มีผล " เนื่องจากไม่มีทรัพยากรใด ๆ ที่จะว่างนอกจากอาร์เรย์สำรองซึ่งจะจัดการกับคนเก็บขยะ
ByteArrayOutputStream
มีtoString(String charsetName)
แต่ยอมรับอาร์กิวเมนต์สตริงเท่านั้น นอกจากนี้ทราบว่า ByteArrayOutputStream จะตรงกันซึ่งอาจไม่พึงประสงค์
คุณสามารถสร้าง PrintStream ด้วย ByteArrayOutputStream ที่ส่งผ่านไปยังตัวสร้างซึ่งคุณสามารถใช้ในภายหลังเพื่อจับข้อความที่เขียนไปยัง PrintStream
ByteArrayOutputStream os = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(os);
...
String output = os.toString("UTF8");
การรวมคำตอบก่อนหน้านี้คำตอบนี้ใช้ได้กับ Java 1.7 และหลังจากนั้น นอกจากนี้ฉันยังเพิ่มรหัสเพื่อปิดสตรีม
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();
บางทีคำถามนี้อาจช่วยคุณได้: รับ OutputStream เป็น String
Subclass OutputStream และห่อไว้ใน PrintStream
กำหนดและเริ่มต้นตัวแปร Scanner ชื่อ inSS ที่สร้างสตรีมสตริงอินพุตโดยใช้ตัวแปร String myStrLine
ตอบ: Scanner inSS = สแกนเนอร์ใหม่ (myStrLine);