学习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编程中非常重要的一部分,初学者应该认真学习并熟练掌握其用法。