程序中所有的数据都是以字节流的方式进行传输的,基于磁盘操作的 I/O 接口:File,基于网络操作的 I/O 接口:Socket
磁盘IO(文件读写)
// 字节操作的 I/O 接口:InputStream(读) 和 OutputStream(写)
BufferedInputStream bufferedInputStream = null;
BufferedOutputStream bufferedOutputStream = null;
try {
// 字节输入流:读数据
bufferedInputStream = new BufferedInputStream(
new FileInputStream(
new File("C:\Users\lixing\Desktop\通话录音.mp3")));
// 字节输出流:写数据
bufferedOutputStream = new BufferedOutputStream(
new FileOutputStream(
new File("C:\Users\lixing\Desktop\通话录音_.mp3")));
// 复制文件
byte[] readBytes = new byte[1024]; // 缓冲大小
int readBytesLen; // 读取字节的长度
while ((readBytesLen = bufferedInputStream.read(readBytes))!= -1) {
bufferedOutputStream.write(readBytes, 0, readBytesLen);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bufferedOutputStream != null) {
try {
bufferedOutputStream.close();
} catch (IOException e) {
System.out.println("bufferedOutputStream关闭失败");
}
}
if (bufferedInputStream != null) {
try {
bufferedInputStream.close();
} catch (IOException e) {
System.out.println("bufferedInputStream关闭失败");
}
}
}
// 字符操作的 I/O 接口:Reader(读)和Writer(写)
BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter = null;
try {
bufferedReader = new BufferedReader(new FileReader(new File("C:\Users\lixing\Desktop\demo.txt")));
bufferedWriter = new BufferedWriter(new FileWriter(new File("C:\Users\lixing\Desktop\demo_.txt")));
String readLine;
while ( (readLine = bufferedReader.readLine()) != null) {
bufferedWriter.write(readLine+"rn");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bufferedWriter != null) {
try {
bufferedWriter.close();
} catch (IOException e) {
System.out.println("bufferedWriter关闭失败");
}
}
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
System.out.println("bufferedReader关闭失败");
}
}
}
网络IO(Socket)
网络 I/O 描述的是计算机之间完成相互通信一种抽象功能。实质是对 Socket 的读取,大部分情况下我们使用的都是基于 TCP/IP 的流套接字,它是一种稳定的通信协议。
当客户端和服务端成功建立连接后都会拥有一个 Socket 实例,每个 Socket 实例都有一个 InputStream 和 OutputStream,正是通过这两个对象来交换数据的