Руководство Java PipedReader
1. PipedReader
Чтобы легче понять PipedReader, я проиллюстрирую это на примере ниже:
Предположим, что вы разрабатываете Multithreading (многопоточное) приложение, и у вас есть 2 независимых Thread: Thread-A и Thread-B. Вопрос в том:
- Что нужно делать, когда каждый раз, когда символы появляются в Thread-A, они автоматически переносятся в Thread-B?
PipedWriter и PipedReader созданы для того, чтобы помочь вам справиться с ситуацией, упомянутой выше. Каждый раз, когда данные записываются в PipedWritrer, они автоматически появляются в PipedReader.
PipedReader constructors
PipedReader()
PipedReader(int pipeSize)
PipedReader(PipedWriter src)
PipedReader(PipedWriter src, int pipeSize)
Чтобы данные, записанные в PipedWriter, появились в PipedReader, необходимо соединить (connect) эти два объекта вместе.
PipedWriter pipedWriter = new PipedWriter();
PipedReader pipedReader = new PipedReader();
pipedWriter.connect(pipedReader);
Приведенный выше code эквивалентен следующим способам:
PipedWriter pipedWriter = new PipedWriter();
PipedReader pipedReader = new PipedReader();
pipedReader.connect(pipedWriter);
PipedWriter pipedWriter = new PipedWriter();
PipedReader pipedReader = new PipedReader(pipedWriter);
PipedReader pipedReader = new PipedReader();
PipedWriter pipedWriter = new PipedWriter(pipedReader);
- Руководство Java PipedWriter
2. Example 1
PipedReaderEx1.java
package org.o7planning.pipedreader.ex;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.io.PipedReader;
import java.io.PipedWriter;
public class PipedReaderEx1 {
private PipedReader pipedReader;
private PipedWriter pipedWriter;
public static void main(String[] args) throws IOException, InterruptedException {
new PipedReaderEx1().test();
}
private void test() throws IOException, InterruptedException {
// Create a PipedReader
pipedReader = new PipedReader();
// Data written to 'pipedWriter'
// will appear automatically at 'pipedReader'.
pipedWriter = new PipedWriter(pipedReader);
new ThreadB().start();
new ThreadA().start();
}
//
class ThreadA extends Thread {
@Override
public void run() {
try {
char[] chs = new char[] { 'a', 'a', 'b', 'c', 'e' };
for (char ch : chs) {
pipedWriter.write(ch);
Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeQuietly(pipedWriter);
}
}
}
//
class ThreadB extends Thread {
@Override
public void run() {
try {
int ch = 0;
while ((ch = pipedReader.read()) != -1) {
System.out.println((char) ch);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeQuietly(pipedReader);
}
}
}
private void closeQuietly(Reader reader) {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
}
}
}
private void closeQuietly(Writer writer) {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
}
}
}
}
Output:
3. Example 2
Например: Использование PipedReader, PipedWriter с BufferedReader и BufferedWriter для повышения производительности программы.
PipedReaderEx2.java
package org.o7planning.pipedreader.ex;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.io.PipedReader;
import java.io.PipedWriter;
public class PipedReaderEx2 {
private BufferedReader bufferedReader;
private BufferedWriter bufferedWriter;
public static void main(String[] args) throws IOException, InterruptedException {
new PipedReaderEx2().test();
}
private void test() throws IOException, InterruptedException {
PipedReader pipedReader = new PipedReader();
PipedWriter pipedWriter = new PipedWriter();
pipedReader.connect(pipedWriter);
this.bufferedReader = new BufferedReader(pipedReader);
this.bufferedWriter = new BufferedWriter(pipedWriter);
new ThreadB().start();
new ThreadA().start();
}
//
class ThreadA extends Thread {
@Override
public void run() {
try {
String[] texts = new String[] { "One\nTwo\n", "Three\nFour\n", "Five" };
for (String text: texts) {
bufferedWriter.write(text);
bufferedWriter.flush();
Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeQuietly(bufferedWriter);
}
}
}
//
class ThreadB extends Thread {
@Override
public void run() {
try {
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeQuietly(bufferedReader);
}
}
}
private void closeQuietly(Reader reader) {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
}
}
}
private void closeQuietly(Writer writer) {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
}
}
}
}
Output:
Руководства Java IO
- Руководство Java CharArrayWriter
- Руководство Java FilterReader
- Руководство Java FilterWriter
- Руководство Java PrintStream
- Руководство Java BufferedReader
- Руководство Java BufferedWriter
- Руководство Java StringReader
- Руководство Java StringWriter
- Руководство Java PipedReader
- Руководство Java LineNumberReader
- Руководство Java PushbackReader
- Руководство Java PrintWriter
- Руководство Java IO Binary Streams
- Руководство Java IO Character Streams
- Руководство Java BufferedOutputStream
- Руководство Java ByteArrayOutputStream
- Руководство Java DataOutputStream
- Руководство Java PipedInputStream
- Руководство Java OutputStream
- Руководство Java ObjectOutputStream
- Руководство Java PushbackInputStream
- Руководство Java SequenceInputStream
- Руководство Java BufferedInputStream
- Руководство Java Reader
- Руководство Java Writer
- Руководство Java FileReader
- Руководство Java FileWriter
- Руководство Java CharArrayReader
- Руководство Java ByteArrayInputStream
- Руководство Java DataInputStream
- Руководство Java ObjectInputStream
- Руководство Java InputStreamReader
- Руководство Java OutputStreamWriter
- Руководство Java InputStream
- Руководство Java FileInputStream
Show More