„Здрасти, Амиго!“
„Здравей, Ели!“
„Днес искам да ви разкажа за класовете StringReader и StringWriter . По принцип няма да е много ново за вас, но понякога тези класове са много полезни. Но най-малкото искам да знаете че те съществуват."
"Тези класове са най-простите имплементации на абстрактните класове Reader и Writer. И те са основно подобни на FileReader и FileWriter. Въпреки това, за разлика от тях, те не работят с данни във файл на диск. Вместо това те работят с String в паметта на JVM."
"Защо ще имаме нужда от такива класове?"
„Понякога те са необходими. По същество StringReader е адаптер между класовете String и Reader . А StringWriter е String, който наследява Writer . Да... Мога да кажа, че това не е най-доброто обяснение. Ще бъде по-добре да разгледаме няколко първо от примерите."
„Например, да предположим, че искате да тествате вашия метод, който чете данни от обекта Reader, предадени му. Можем да го направим така:“
public static void main (String[] args) throws Exception
{
String test = "Hi!\n My name is Richard\n I'm a photographer\n";
// This line is key: we "convert" the String into a Reader.
StringReader reader = new StringReader(test);
executor(reader);
}
public static void executor(Reader reader) throws Exception
{
BufferedReader br = new BufferedReader(reader);
String line;
while (line = br.readLine() != null)
{
System.out.println(line);
}
}
"С други думи, ние просто взехме String, обвихме го в StringReader и след това го предадохме instead of обект Reader? И всичко ще бъде прочетено от него, Howто ни трябва?"
„Да. Хм. И има смисъл в това. Сега нека тестваме методите на StringWriter. За да направим това, ще направим примера по-сложен. Сега той няма просто да чете редовете и да ги показва на екрана, instead of това ще ги обърне и ще ги изведе към записващия обект. Например:"
public static void main (String[] args) throws Exception
{
// The Reader must read this String.
String test = "Hi!\n My name is Richard\n I'm a photographer\n";
// Wrap the String in a StringReader.
StringReader reader = new StringReader(test);
// Create a StringWriter object.
StringWriter writer = new StringWriter();
// Copy strings from the Reader to the Writer, after first reversing them.
executor(reader, writer);
// Get the text that was written to the Writer.
String result = writer.toString();
// Display the text from the Writer on the screen.
System.out.println("Result: "+ result);
}
public static void executor(Reader reader, Writer writer) throws Exception
{
BufferedReader br = new BufferedReader(reader);
String line;
// Read a string from the Reader.
while (line = br.readLine()) != null)
{
// Reverse the string.
StringBuilder sb = new StringBuilder(line);
String newLine = sb.reverse().toString();
// Write the string to the Writer.
writer.write(newLine);
}
}
„Създадохме обект StringWriter , който съдържа низ, който съхранява всичко, написано на този писател . И за да го получите, просто трябва да извикате метода toString ().“
„Хм. НяHow си всичко изглежда твърде лесно. Методът изпълнител работи с обектите на потока reader и writer , но ние работим с низове в основния метод.
— Наистина ли всичко е толкова просто?
"Да. За да конвертирате низ в Reader , просто напишете това:"
String s = "data";
Reader reader = new StringReader(s);
„А преобразуването на StringWriter в String е още по-лесно:“
Writer writer = new StringWriter();
/* Here we write a bunch of data to the writer */
String result = writer.toString();
„Това са отлични курсове според мен. Благодаря, че ми разказа за тях, Ели.“
GO TO FULL VERSION