学习IO流
- 前言
- 一、Java IO流概述
- 二、Java IO流分类
- 1.字节流
- 2.字符流
- 三、Java IO流常用方法
- 1.字节流常用方法
- 2.字符流常用方法
- 四、Java IO流应用
- 1.文件读写
- 2.网络编程
- 五、总结
前言
Java IO流是Java中重要的输入输出模型,也是Java编程中必不可少的一个知识点。本文将介绍Java IO流的概念、分类、用法等内容,希望能帮助初学者更好地掌握Java IO流。
一、Java IO流概述
Java IO流是Java编程中重要的输入输出模型,是实现数据输入输出的一种方式。在Java中,输入输出被抽象为流的概念,即将数据从一个地方流向另一个地方。流是一组按顺序排列的字节或字符。Java中的IO流被封装在java.io包中
二、Java IO流分类
Java IO流分为两类:字节流和字符流。字节流处理的是8位字节,常用于处理二进制文件和网络传输数据;而字符流处理的是16位字符,常用于处理文本文件。
1.字节流
代码如下(示例):
字节流包含两个抽象类:InputStream和OutputStream。InputStream表示输入流,是读取数据的基类,其常用子类有FileInputStream、ByteArrayInputStream、PipedInputStream、ObjectInputStream等;OutputStream表示输出流,是写出数据的基类,其常用子类有FileOutputStream、ByteArrayOutputStream、PipedOutputStream、ObjectOutputStream等。
2.字符流
字符流包含两个抽象类:Reader和Writer。Reader表示输入流,是读取字符数据的基类,其常用子类有FileReader、CharArrayReader、StringReader等;Writer表示输出流,是写出字符数据的基类,其常用子类有FileWriter、CharArrayWriter、StringWriter等。
三、Java IO流常用方法
1.字节流常用方法
InputStream类常用方法:
int read(): 读取一个字节的数据,返回值为0-255,如果到达文件末尾,返回-1;
int read(byte[] b): 从输入流中读取b.length个字节的数据,并将其存储在数组b中;
void close(): 关闭输入流。
OutputStream类常用方法:
void write(int b): 写出一个字节的数据;
void write(byte[] b): 将数组b中的数据全部写出;
void flush(): 刷新输出流,将缓冲区中的数据写出;
void close(): 关闭输出流
2.字符流常用方法
Reader类常用方法:
int read(): 读取一个字符的数据,返回值为0-65535,如果到达文件末尾,返回-1;
int read(char[] cbuf): 从输入流中读取cbuf.length个字符的数据,并将其存储在数组cbuf中;
void close(): 关闭输入流。在这里插入代码片
Writer类常用方法:
void write(int c): 写出一个字符的数据;
void write(char[] cbuf): 将数组cbuf中的数据全部写出;
void flush(): 刷新输出流,将缓冲区中的数据写出;
void close(): 关闭输出流。
四、Java IO流应用
1.文件读写
读取文件数据:
FileInputStream fis = new FileInputStream
File("example.txt");
int data = fis.read();
while (data != -1) {
System.out.print((char) data);
data = fis.read();
}
fis.close();
写入文件数据:
FileOutputStream fos = new FileOutputStream(new File("example.txt"), true);
String s = "This is a test string.";
byte[] data = s.getBytes();
fos.write(data);
fos.flush();
fos.close();
2.网络编程
使用Socket类进行TCP通信:
Socket socket = new Socket("localhost", 6666);
OutputStream os = socket.getOutputStream();
os.write("Hello, server.".getBytes());
os.flush();
socket.shutdownOutput();
InputStream is = socket.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
System.out.println(baos.toString());
is.close();
socket.close();
使用ServerSocket类进行TCP通信:
ServerSocket serverSocket = new ServerSocket(6666);
Socket socket = serverSocket.accept();
InputStream is = socket.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
System.out.println(baos.toString());
OutputStream os = socket.getOutputStream();
os.write(new StringBuilder(baos.toString()).reverse().toString().getBytes());
os.flush();
socket.shutdownOutput();
is.close();
os.close();
socket.close();
serverSocket.close();
五、总结
本文介绍了Java IO流的概念、分类、用法等内容,包括字节流和字符流的常用方法以及文件读写和网络编程的应用。Java IO流是Java编程中非常重要的一部分,初学者应该认真学习并熟练掌握其用法。