Ввод - вывод. Символьные потоки

Содержание

Слайд 2

V. Ввод - вывод 3. Символьные потоки

V. Ввод - вывод
3. Символьные потоки


Слайд 3

Потоки

Потоки

Слайд 4

Потоки вывода


Потоки вывода

Слайд 5

Иерархия классов символьных потоков вывода

Иерархия классов символьных потоков вывода

Слайд 6

Класс Writer public abstract class Writer { public void write(int c)

Класс Writer

public abstract class Writer {
public void write(int c) throws IOException

{
synchronized (lock) {
if (writeBuffer == null){
writeBuffer = new char[writeBufferSize];
}
writeBuffer[0] = (char) c;
write(writeBuffer, 0, 1);
}
}
public void write(char cbuf[]) throws IOException
abstract public void write(char cbuf[], int off, int len) throws IOException;
public void write(String str) throws IOException
public void write(String str, int off, int len) throws IOException
abstract public void flush() throws IOException;
abstract public void close() throws IOException;
}

C

A

Слайд 7

public class OutputStreamWriter extends Writer { private final StreamEncoder se; public

public class OutputStreamWriter extends Writer {
private final StreamEncoder se;
public

OutputStreamWriter( OutputStream out )
public OutputStreamWriter( OutputStream out , String charsetName )
public void write(int c) throws IOException
public void write(char cbuf[], int off, int len) throws IOException
public void write(String str, int off, int len) throws IOException
public String getEncoding()
public void flush()
public void close()
}

OutputStream out

Класс OutputStreamWriter

C

StreamEncoder se

OutputStream out

String charsetName

Слайд 8

Класс FileWriter public class FileWriter extends OutputStreamWriter { public FileWriter(File file)

Класс FileWriter

public class FileWriter extends OutputStreamWriter {
public FileWriter(File file) throws

IOException {
super(new FileOutputStream(file));
}
public FileWriter(File file, boolean append) throws IOException {
super(new FileOutputStream(file, append));
}
}

C

FileOutputStream(file, append)

FileOutputStream(file)

Слайд 9

Запись в файл по одному символу public class WriteCharDemo { public

Запись в файл по одному символу

public class WriteCharDemo {
public static

void main(String[] args) {
FileWriter out = null;
try {
out = new FileWriter("I:\\FileIO\\charfile.txt");
for (int i = 0x0410; i < 0x0450; i++) {
System.out.print((char)i);
out.write(i);
}
} catch (IOException e) {
System.out.println("An I/O error occured");
} finally {
try {
if (out != null)
out.close();
} catch (IOException e) {
System.out.println("Error closing file");
}
}
}
}
АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя
Слайд 10

Запись в файл массива символов public class WriteCharsDemo { public static

Запись в файл массива символов

public class WriteCharsDemo {
public static void

main(String[] args) {
FileWriter out = null;
char[] chars = new char[64];
for (int i = 0; i < 64; i++) {
chars[i] = (char) (0x0410 + i);
}
System.out.println(Arrays.toString(chars));
try {
out = new FileWriter("I:\\FileIO\\charsfile.txt");
out.write(chars);
} catch (IOException e) {
System.out.println("An I/O error occured");
} finally {
try {
if (out != null)
out.close();
} catch (IOException e) {
System.out.println("Error closing file");
}
}
}
}
[А, Б, В, Г, Д, Е, Ж, З, И, Й,..., Щ, Ъ, Ы, Ь, Э, Ю, Я, а, б, в, г, д, е, ж, з, и, й,..., щ, ъ, ы, ь, э, ю, я]
Слайд 11

Запись в файл массива символов

Запись в файл массива символов

Слайд 12

Запись строки в файл public class WriteStringDemo { public static void

Запись строки в файл

public class WriteStringDemo {
public static void main(String[]

args) throws IOException {
String source = "Hello World!";
FileWriter out = null;
System.out.println("String to write: " + source );
System.out.println("Default charset (encoding): " + Charset.defaultCharset());
System.out.println("String bytes using default encoding: " + Arrays.toString(source.getBytes()));
try {
out = new FileWriter("I:\\FileIO\\stringfile.dat");
out.write(source);
} catch (IOException e) {
System.out.println("An I/O error occured");
} finally {
try {
if (out != null)
out.close();
} catch (IOException e) {
System.out.println("Error closing file");
}
}
}
}
String to write: Hello World!
Default charset (encoding): windows-1251
String bytes using default encoding: [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]
Слайд 13

Запись строки в файл

Запись строки в файл

Слайд 14

Запись строки в файл в кодировке UTF-16 public class WriteEncodingDemo {

Запись строки в файл в кодировке UTF-16

public class WriteEncodingDemo {
public

static void main(String[] args) throws UnsupportedEncodingException{
String source = "Hello World!";
Writer out = null;
System.out.println("String to write: " + source );
System.out.println("String bytes using UTF-16: " + Arrays.toString(source.getBytes("UTF-16")));
try {
FileOutputStream os = new FileOutputStream("I:\\FileIO\\WriteString.txt");
out = new OutputStreamWriter(os, "UTF-16");
out.write(source);
} catch (IOException e) {
System.out.println("An I/O error occured");
} finally {
try {
if (out != null)
out.close();
} catch (IOException e) {
System.out.println("Error closing file");
}
}
}
}
String to write: Hello World!
String bytes using UTF-16:
[-2, -1, 0, 72, 0, 101, 0, 108, 0, 108, 0, 111, 0, 32, 0, 87, 0, 111, 0, 114, 0, 108, 0, 100, 0, 33]
Слайд 15

Запись строки в файл в кодировке UTF-16

Запись строки в файл в кодировке UTF-16

Слайд 16

Буферизованный вывод


Буферизованный вывод

Слайд 17

Класс BufferedWriter public class BufferedWriter extends Writer { private Writer out;

Класс BufferedWriter

public class BufferedWriter extends Writer {
private Writer out;
private char

cb[];
private int nChars, nextChar;
private static int defaultCharBufferSize = 8192;
public BufferedWriter(Writer out)
public BufferedWriter(Writer out, int sz)
public void write(int c)throws IOException
public void write(char cbuf[], int off, int len) throws IOException
public void write(String s, int off, int len) throws IOException
public void flush() throws IOException {
...
out.flush();
...
}
public void close() throws IOException {
...
out.close();
...
}
}

C

Слайд 18

Опустошение буфера public class WriteFlushDemo { public static void main(String[] args)

Опустошение буфера

public class WriteFlushDemo {
public static void main(String[] args) throws

IOException {
String source = "Hello World!";
BufferedWriter out1 = null;
BufferedWriter out2 = null;
System.out.println("String to write: " + source );
try {
out1 = new BufferedWriter(new FileWriter("I:\\FileIO\\file1.txt"));
out2 = new BufferedWriter(new FileWriter("I:\\FileIO\\file2.txt"));
out1.write(source);
out2.write(source);
} catch (IOException e) {
System.out.println("An I/O error occured");
} finally {
try {
if (out1 != null)
out1.close();
} catch (IOException e) {
System.out.println("Error closing file");
}
}
}
}
String to write: Hello World!
Слайд 19

Опустошение буфера

Опустошение буфера

Слайд 20

Производительность буферизованного вывода public class WriteBufPerform { public static void main(String[]

Производительность буферизованного вывода
public class WriteBufPerform {
public static void main(String[]

args) throws IOException {
BufferedWriter outbuf = null;
FileWriter out = null;
long time = System.currentTimeMillis();
try {
outbuf = new BufferedWriter(new FileWriter(
"I:\\FileIO\\outbuf.txt"));
for (int i = 0; i < 10000000; i++) {
outbuf.write(65);
}
} catch (IOException e) {
System.out.println("An I/O error occured");
} finally {
try {
if (outbuf != null)
outbuf.close();
} catch (Exception e) {
System.out.println("Error closing file");
}
}
time = System.currentTimeMillis() - time;
System.out.println("Buffered output time: " + time);
...
}
}
Слайд 21

Производительность небуферизованного вывода public class WriteBufPerform { public static void main(String[]

Производительность небуферизованного вывода
public class WriteBufPerform {
public static void main(String[]

args) throws IOException {
...
time = System.currentTimeMillis();
try {
out = new FileWriter("I:\\FileIO\\outnobuf.txt");
for (int i = 0; i < 10000000; i++) {
out.write(65);
}
} catch (IOException e) {
System.out.println("An I/O error occured");
} finally {
try {
if (out != null)
out.close();
} catch (IOException e) {
System.out.println("Error closing file");
}
}
time = System.currentTimeMillis() - time;
System.out.println("Non-buffered output time: " + time);
}
}
Buffered output time: 516
Non-buffered output time: 1469
Слайд 22

Почему такой маленький выигрыш?

Почему такой маленький выигрыш?

Слайд 23

Потоки ввода


Потоки ввода

Слайд 24

Иерархия классов символьных потоков ввода

Иерархия классов символьных потоков ввода

Слайд 25

Класс Reader public abstract class Reader { public int read() throws

Класс Reader

public abstract class Reader {
public int read() throws IOException

{
char cb[] = new char[1];
if (read(cb, 0, 1) == -1)
return -1;
else
return cb[0];
}
public int read(char cbuf[]) throws IOException {
return read(cbuf, 0, cbuf.length);
}
public abstract int read(char[] cbuf, int off, int len) throws IOException;
public abstract void close() throws IOException;
}

C

A

Слайд 26

public class InputStreamReader extends Reader { private final StreamDecoder sd; InputStreamReader(

public class InputStreamReader extends Reader {
private final StreamDecoder sd;
InputStreamReader(

InputStream in)
InputStreamReader( InputStream in , String charsetName )
public int read() throws IOException
public int read(char[] cbuf, int off, int len) throws IOException
String getEncoding()
void close()
}

Класс InputStreamReader

C

InputStream in

StreamDecoder sd

InputStream in

String charsetName

Слайд 27

Класс FileReader public class FileReader extends InputStreamReader { public FileReader(String fileName)

Класс FileReader

public class FileReader extends InputStreamReader {
public FileReader(String fileName) throws

FileNotFoundException {
super(new FileInputStream(fileName));
}
}

C

Слайд 28

Чтение из файла по одному символу public class ReadCharDemo { public

Чтение из файла по одному символу

public class ReadCharDemo {
public static

void main(String[] args) throws IOException {
FileReader in = null;
int temp;
try {
in = new FileReader("I:\\FileIO\\charfile.txt");
for (int i = 0; i < 64; i++) {
temp = in.read();
if (temp == -1)
break;
System.out.print((char)temp);
}
} catch (IOException e) {
System.out.println("An I/O error occured");
} finally {
try {
if (in != null)
in.close();
} catch (IOException e) {
System.out.println("Error closing file");
}
}
}
}
АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя
Слайд 29

Чтение из файла массива символов public class ReadCharsDemo { public static

Чтение из файла массива символов

public class ReadCharsDemo {
public static void

main(String[] args) throws IOException {
FileReader in = null;
try {
in = new FileReader("I:\\FileIO\\charfile.txt");
char[] chars = new char[64];
int nread = in.read(chars);
if (nread > 0) {
System.out.println("Read " + nread + " characters");
System.out.println(Arrays.toString(chars));
}
} catch (IOException e) {
System.out.println("An I/O error occured");
} finally {
try {
if (in != null)
in.close();
} catch (IOException e) {
System.out.println("Error closing file");
}
}
}
}
Read 64 characters
[А, Б, В, Г, Д, Е, Ж, З, И, Й,..., Щ, Ъ, Ы, Ь, Э, Ю, Я, а, б, в, г, д, е, ж, з, и, й,..., щ, ъ, ы, ь, э, ю, я]
Слайд 30

Чтение символов из файла в кодировке UTF-16 public class ReadEncodingDemo {

Чтение символов из файла в кодировке UTF-16

public class ReadEncodingDemo {
public

static void main(String[] args) throws Exception {
FileInputStream is = new FileInputStream("I:\\FileIO\\writeutf16.txt");
Reader in = new InputStreamReader(is, "UTF-16");
int data = in.read();
while (data != -1) {
char dataChar = (char) data;
data = in.read();
System.out.print(dataChar);
}
in.close();
}
}
Hello World!
Слайд 31

Буферизованный ввод


Буферизованный ввод

Слайд 32

Класс BufferedReader public class BufferedReader extends Reader { private Reader in;

Класс BufferedReader

public class BufferedReader extends Reader {
private Reader in;
private

char cb[];
private int nChars, nextChar;
private static int defaultCharBufferSize = 8192;
public BufferedReader(Reader in, int sz) {
super(in);
if (sz <= 0)
throw new IllegalArgumentException("Buffer size <= 0");
this.in = in;
cb = new char[sz];
nextChar = nChars = 0;
}
public BufferedReader(Reader in) {
this(in, defaultCharBufferSize);
}
int read()
int read(char[] cbuf, int off, int len)
String readLine()
public void close() throws IOException {
...
out.close();
...
}
}

C

Слайд 33

Производительность буферизованного ввода public class ReadBufPerform { public static void main(String[]

Производительность буферизованного ввода

public class ReadBufPerform {
public static void main(String[]

args) throws IOException {
BufferedReader inbuf = null;
FileReader in = null;
int temp;
long time = System.currentTimeMillis();
try {
inbuf = new BufferedReader(new FileReader("I:\\FileIO\\outbuf.txt"));
for (int i = 0; i < 10000000; i++) {
temp = inbuf.read();
}
} catch (IOException e) {
System.out.println("An I/O error occured");
} finally {
try {
if (inbuf != null)
inbuf.close();
} catch (IOException e) {
System.out.println("Error closing file");
}
}
...
}
}
Слайд 34

Производительность небуферизованного ввода public class ReadBufPerform { public static void main(String[]

Производительность небуферизованного ввода
public class ReadBufPerform {
public static void main(String[]

args) throws IOException {
...
time = System.currentTimeMillis();
try {
in = new FileReader("I:\\FileIO\\outnobuf.txt");
for (int i = 0; i < 10000000; i++) {
temp = in.read();
}
} catch (IOException e) {
System.out.println("An I/O error occured");
} finally {
try {
if (in != null)
in.close();
} catch (IOException e) {
System.out.println("Error closing file");
}
}
time = System.currentTimeMillis() - time;
System.out.println("Non-buffered input time: " + time);
}
}
Buffered input time: 437
Non-buffered input time: 891
Слайд 35

Почему такой маленький выигрыш?

Почему такой маленький выигрыш?