流(对象)是在内存与存储设备之间传输数据的通道
1.方向: a. 输出流:用以将中的内容写入到当中。 b. 输入流:用以将中的内容读入到当中。 2. 单位: a. 字节流:以字节为单位,可以读写所有数据。 b. 字符流:以字符为单位,可以读写文本数据。 3. 功能: a. 节点流:实际传输数据。 b. 过滤流:强加节点流功能。
常见的字节流: 文件流:FileOutputStream 和 FileInputStream 缓冲流:BufferedOutputStream 和 BufferedInputStream 对象流:ObjectOutputStream 和 ObjectInputStream 常见的字符流:字节转字符流:InputStreamReader 和 OutputStreamWriter
缓冲字符流:PrintWriter 和 BufferedReader
三.八个IO流类 1.FileInputStream和FileOutputStream (文件字节输入流和文件字节输出流)属性:字节流
主要方法:分别为read() 读一个字节 和 read(byte[]) 读一个字节数组
writer() 写一个字节 和 writer(byte[]) 写一个字节数组
用途:用于字节文件(图像,影音等)的文件传输
代码提示:
//图像复制:
String path="D:"+File.separator +"test.png";
String resultPath="D:"+File.separator +"test1.png";
File file=new File(path);
//File resultfile=new File(path);
FileInputStream fin = null;
FileOutputStream fout = null;
try{
fin =new FileInputStream(file);
fout = new FileOutputStream(resultpath,true);
int result=0;
while((result=fin.read()!=-1){
fout.write(result);
}
}catch (IOException e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
tip:
一个文件只能打开一个方向的流通道 输出流会自己新建文件,但不会新建目录 2.FileReader和FileWriter(文件字符输入流和文件字符输出流)属性:字符流
主要方法: read() 读一个字符 和read(char[])
writer() 写一个字符 和writer(char[])
用途:文本文件的传输
代码提示: 如上图
3.BufferedInputStream和BufferedOutputStream(缓冲字节输入流和缓冲字节输出流)属性:缓冲流 字节流
用途:字节流的用法,但速度更快
代码提示:
4.BufferedReader和BufferedWriter(缓冲字符输入流和缓冲字符输出流)属性: 缓冲流 字符流
主要方法:多了一个readLine()和newLine()等
用途:字符流的用途,速度更快
代码提示:
String path = "D:" + File.separator + "test.txt";
String resultpath = "D:" + File.separator + "test1.txt";
BufferedReader br = null;
BufferedWriter bw = null;
char[] a = new char[100];
try {
br = new BufferedReader(new FileReader(path));
bw = new BufferedWriter(new FileWriter(resultPath, true));
// --------------------------第一种
/*br.read(a);
String st = new String(a);
System.out.println(st);
bw.write(st);*/
// -------------更简洁的另一种,但没有中间变量st
int temp = 0;
while ((temp = br.read()) != -1) {
bw.write(temp);
}
// -----------------------
} catch (IOException e) {
e.printStackTrace();
} finally {
CloseIO.charClose(br, bw);//自己写的封装的流的关闭
}
四.详解
字符流本质是字节流的拓展封装
缓冲流是字节流和字符流的包装,使用缓冲流效率更好
InputStreamReader是从字节流到字符流的桥接器
InputStreamReader rd = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(rd);
String readLine = br.readLine();
//-----------------------------第二种
InputStream is = client.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String rl = br.readLine();
4.网络编程中,Java用的是对象流Socket