Что такое Java StringWriter
, и когда следует использовать его?Когда следует использовать Java StringWriter?
Я прочитал документацию и посмотрел here, но я не понимаю, когда я должен ее использовать.
Что такое Java StringWriter
, и когда следует использовать его?Когда следует использовать Java StringWriter?
Я прочитал документацию и посмотрел here, но я не понимаю, когда я должен ее использовать.
Используется для построения строки char-by-char
или string-by-string
.
Он похож на StringBuilder
, но использует StringBuffer
под капотом. Это предпочтительнее, когда вы работаете с API, который требует потока или записи. Если у вас нет этого требования, должно быть более эффективно использовать StringBuilder
(из-за накладных расходов синхронизации StringBuffer
).
Конечно, это имеет смысл, только если вы понимаете, что конкатенацию (например.
String s = "abc"+"def"; //... (especially when spread throughout a loop)`
является медленной операцией (см here).
небольшой, например
StringWriter writer = new StringWriter();
writer.write('t');
writer.write("his awesome");
String result = writer.toString();
System.out.println(result); //outputs this is awesome
лучший вариант пример:
Это специализированный Writer
, который записывает символы в StringBuffer
, а затем мы используем метод, например toString()
, чтобы получить результат строки.
Когда используется StringWriter
, вы хотите написать строку, но API ожидает или Stream
. Это скомпрометировано, вы используете StringWriter
только тогда, когда вам нужно, поскольку StringBuffer
/StringBuilder
для написания персонажей намного более естественным и простым, что должно быть вашим первым выбором.
Вот два типичных хороший случай, чтобы использовать StringWriter
1.Converts трассировку стеки в String
, так что мы можем войти легко.
StringWriter sw = new StringWriter();//create a StringWriter
PrintWriter pw = new PrintWriter(sw);//create a PrintWriter using this string writer instance
t.printStackTrace(pw);//print the stack trace to the print writer(it wraps the string writer sw)
String s=sw.toString(); // we can now have the stack trace as a string
2.Another случай будет, когда нам нужно скопировать из InputStream
в гольцов на Writer
, так что мы можем получить String
позже, используя Apache commons IOUtils#copy:
StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, encoding);//copy the stream into the StringWriter
String result = writer.toString();
Многие ваши объяснения были уже рассмотрены в моем ответе – RossBille
@RossBille, вы даете хорошее объяснение, но с плохим примером, в котором мы не должны выбирать 'StringWriter' на самом деле. Кроме того, я не думаю, что мы должны называть его похожим на 'StringBuffer' /' StringBuilder', он скорее похож на адаптер, который имеет дело с потоками/сценариями, это нужно делать только тогда, когда у нас нет другого выбора. – Jaskey
Может быть, это будет полезно для других люди должны знать. – MarkusWillson
Все люди могут просто искать 'StringWriter' javadoc. –
Какая часть «потока символов, который собирает свой вывод в строчном буфере, который затем может использоваться для построения строки», разве вы не понимаете? – EJP