2014-12-01 1 views
3

Что такое Java StringWriter, и когда следует использовать его?Когда следует использовать Java StringWriter?

Я прочитал документацию и посмотрел here, но я не понимаю, когда я должен ее использовать.

+3

Может быть, это будет полезно для других люди должны знать. – MarkusWillson

+3

Все люди могут просто искать 'StringWriter' javadoc. –

+3

Какая часть «потока символов, который собирает свой вывод в строчном буфере, который затем может использоваться для построения строки», разве вы не понимаете? – EJP

ответ

2

Используется для построения строки 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 

лучший вариант пример:

+1

Я использую StringBuffer/StringBuilder вместо StringWriter для вашего случая. – Jaskey

+0

Кто-нибудь хочет объяснить свои голоса? Не отвечает ли это на вопрос? – RossBille

8

Это специализированный 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(); 
+0

Многие ваши объяснения были уже рассмотрены в моем ответе – RossBille

+0

@RossBille, вы даете хорошее объяснение, но с плохим примером, в котором мы не должны выбирать 'StringWriter' на самом деле. Кроме того, я не думаю, что мы должны называть его похожим на 'StringBuffer' /' StringBuilder', он скорее похож на адаптер, который имеет дело с потоками/сценариями, это нужно делать только тогда, когда у нас нет другого выбора. – Jaskey