一、处理流:

增强功能,提供性能,在节点流之上。

二、节点流与处理流的关系

节点流(字节流、字符流)处于IO操作的第一线,所有操作必须通过它们进行;

处理流可以对其他流进行处理(提高效率或操作灵活性)。

三、缓冲流

1、字节缓冲流

BufferedInputStream

BufferedOutputStream

package IOBuffer;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

/**

* 处理流(字节缓冲流)

* 字节流文件拷贝+缓冲流,提高性能

* 缓冲流(节点流)

*/

@SuppressWarnings("all")

public class Demo01 {

public static void main(String[] args) {

String srcPath = "G:/1314.jpg";

String destPath = "G:/try/520.jpg";

try {

copyFile(srcPath,destPath);

} catch (IOException e) {

e.printStackTrace();

}

}

public static void copyFile(String srcPath,String destPath) throws IOException

{

//1、建立联系  源存在(且为文件)+目的地(文件可以不存在)

File src = new File(srcPath);

File dest = new File(destPath);

if(!src.isFile())

{

System.out.println("只能拷贝文件");

throw new IOException("只能拷贝文件");

}

//2、选择流 缓冲流(字节输入流)

InputStream is = new BufferedInputStream(new FileInputStream(src));

OutputStream os =new BufferedOutputStream(new FileOutputStream(dest)) ;

//3、文件拷贝  循环+读取+写出

byte[] flush = new byte[1024];

int len = 0;

while(-1!=(len = is.read(flush)))

{

//写出

os.write(flush,0,len);

}

os.flush();//强制刷出

//关闭流 先打开后关闭

os.close();

is.close();

}

}

2、字符缓冲流

BufferedReader  新增readLine()读取一个文本行。

BufferedWriter  新增newLine()写入一个行分隔符。

package IOBuffer;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

/**

*

* 字符缓冲流+新增方法(不能发生多态)

*/

public class Demo02 {

public static void main(String[] args) {

String srcPath = "G:/oo.txt";

String destPath = "G:/xx.txt";

//创建源

File src = new File(srcPath);

File dest = new File(destPath);

//选择流   缓冲流   如果后面要使用新增方法,就不能使用多态了。

//如果没有使用子类的新增方法,可以使用多态方式。

/*Reader reader = null;

Writer writer = null;

reader =new BufferedReader(new FileReader(src)) ;

writer = new BufferedWriter(new FileWriter(dest));

reader.read(flush)

writer.write(flush,0,len)*/

BufferedReader reader = null;

BufferedWriter writer = null;

try {

reader =new BufferedReader(new FileReader(src)) ;

writer = new BufferedWriter(new FileWriter(dest));

//读取操作

//新增方法操作的字符缓冲流

String line = null;//一行一行读取 BufferedReader新增readLine()

while(null!=(line = reader.readLine()))

{

writer.write(line);

//writer.append("\r\n");//换行符

writer.newLine();//换行符  新增方法

}

writer.flush();

} catch (FileNotFoundException e) {

e.printStackTrace();

System.out.println("文件不存在");

} catch (IOException e) {

e.printStackTrace();

}

finally

{

if(null!=reader)

{

try {

writer.close();

reader.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

四、转换流

(一)字节流转换为字符流,处理乱码(编码集、解码集)

解码:二进制–>解码字符集–>字符

编码:字符–>编码字符集–>二进制

(二)为什么会出现乱码?

1、解码与MT4登录真实账户教程编码的字符集不统一

2、字节缺少,长度丢失

(三)文件乱码(通过转换流进行处理)

package IOConver;

import java.io.UnsupportedEncodingException;

public class Demo01 {

public static void main(String[] args) {

test01();

System.out.println("-----------");

test02();

}

//解码与编码字符集字符集必须相同

public static  void test01()

{

//解码byte-->char

String str = "中国";//UTF-8

//编码 char-->byte

byte[] data = str.getBytes();

//编码与解码的字符集统一

System.out.println(new String(data));

try {

data  = str.getBytes("gbk");//设定编码字符集    编码

//不统一字符集,出现乱码

System.out.println(new String(data));//解码

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

byte[] data2;

try {

//编码

data2 = "中国".getBytes("GBK");

//解码

str = new String(data2,"GBK");

//str = new String(data2);//不指定 默认解码UTF-8 会出现乱码

System.out.println(new String(str));

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

}

//字节缺少,长度丢失

public static  void test02(){

String str = "中国";

byte[] data;

data = str.getBytes();//编码

//字节数不完整

System.out.println(new String(data,0,4));

}

}

运行结果:

�й�

中国

-----------

中�

package IOConver;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

/**

* 转换流:字节转为字符

* 1、输出流OutputStreamWriter  编码

* 2、输入流InputStreamReader  解码

*/

public class Demo02 {

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

//输入文件  解码 (字节到字符)   读取  要显示

//指定解码字符集    BufferedReader字符流--InputStreamReader转换流--FileInputStream字节流

BufferedReader br = new BufferedReader

(

new InputStreamReader

(

new FileInputStream(new File("g:/writer.txt")),"UTF-8"

)

);//指定字符解码集

//写出文件     编码(字符到字节)

BufferedWriter bw = new BufferedWriter

(

new OutputStreamWriter

(

new FileOutputStream(new File("G:/try/abdec.txt")),"UTF-8"

)

);

String info = null;

while(null!=(info = br.readLine()))

{

System.out.println(info);

bw.write(info+"\r\n");

}

bw.flush();

bw.close();

br.close();

}

}

运行结果:

每个人都有青春,

每个青春都有一个故事,

每个故事都有一个遗憾,

每个遗憾却都存在着他的美好。ouye

————————————————

原文链接:https://blog.csdn.net/scgaliguodong123_/article/details/45932481

最新文章

  1. js 正则验证输入框只允许输入正实数和正整数和负整数
  2. JAVA/Android Map与String的转换方法
  3. 第十六回 IoC组件Unity续~批量动态为Unity添加类型和行为
  4. Jmeter :多个jmeter如何参数化获取不同的CSV文件
  5. JavaScript escape encodeURI encodeURIComponent() 函数
  6. MySQL 错误代码和消息
  7. 《JavaScript高级程序设计》 读书笔记(一)
  8. 2016 11 9遇到问题 http请求的各种方式
  9. android小知识
  10. BCP导入导出MsSql
  11. Linux系统挂载Windows系统下的共享文件
  12. string.GetHashCode获取值不一样
  13. VS2015 编译前/后拷贝文件到指定目录
  14. Java实现各种内部排序算法
  15. JS文档DOM
  16. Robot Framework——百度搜索
  17. 二次封装bootstrap-table及功能优化
  18. 文本数据预处理:sklearn 中 CountVectorizer、TfidfTransformer 和 TfidfVectorizer
  19. linux下生成带符号的随机密码
  20. tcpdump的使用

热门文章

  1. C++的命名空间
  2. poj 1144 割点模板题
  3. RAM/ROM IP一次性总结
  4. Vue项目中使用Vux
  5. swagger2 官网配置
  6. SCP-bzoj-1069
  7. Network基础(五):配置静态路由、配置浮动路由、配置多路由的静态路由、配置默认路由
  8. MVC MVC3中 ViewBag、ViewData和TempData的使用和区别 【转】
  9. TDengine陶建辉 自带聚光灯&BGM的半百少年
  10. Django基础篇(一)