一、处理流:

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

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

节点流(字节流、字符流)处于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

Java IO之处理流的更多相关文章

  1. Java IO 文件与流基础

    Java IO 文件与流基础 @author ixenos 摘要:创建文件.文件过滤.流分类.流结构.常见流.文件流.字节数组流(缓冲区) 如何创建一个文件 #当我们调用File类的构造器时,仅仅是在 ...

  2. Java IO: 其他字符流(下)

    作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackReader,LineNumberReader,St ...

  3. Java IO之字符流和文件

    前面的博文介绍了字节流,那字符流又是什么流?从字面意思上看,字节流是面向字节的流,字符流是针对unicode编码的字符流,字符的单位一般比字节大,字节可以处理任何数据类型,通常在处理文本文件内容时,字 ...

  4. [Java IO]03_字符流

    Java程序中,一个字符等于两个字节. Reader 和 Writer 两个就是专门用于操作字符流的类. Writer Writer是一个字符流的抽象类.  它的定义如下: public abstra ...

  5. JAVA IO之管道流总结大全(转)

    要在文本框中显示控制台输出,我们必须用某种方法“截取”控制台流.换句话说,我们要有一种高效地读取写入到System.out和 System.err 所有内容的方法.如果你熟悉Java的管道流Piped ...

  6. java IO之 序列流 集合对象Properties 打印流 流对象

    序列流 也称为合并流. SequenceInputStream 序列流,对多个流进行合并. SequenceInputStream 表示其他输入流的逻辑串联.它从输入流的有序集合开始,并从 第一个输入 ...

  7. java io之管道流

    一.java.io中存在一中流叫管道流,类似管道的功能.PipedOutputStream和PipedInputStream分别是管道输出流和管道输入流.这个两个流必须同时使用. 二.作用:进行两个线 ...

  8. 系统学习 Java IO (六)----管道流 PipedInputStream/PipedOutputStream

    目录:系统学习 Java IO---- 目录,概览 PipedInputStream 类使得可以作为字节流读取管道的内容. 管道是同一 JVM 内的线程之间的通信通道. 使用两个已连接的管道流时,要为 ...

  9. Java IO编程——字符流与字节流

    在java.io包里面File类是唯一 一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能够操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操作.而对于程序而 ...

随机推荐

  1. @ResponseEntity返回值(怪异)

    定制相应头 /** * 将返回数据放在响应体中 * * ResponseEntity<String>:响应体中内容的类型 * @return */ //@ResponseBody @Req ...

  2. Es学习第六课, ES基本搜索_search

    前面几课ES的基本概念.安装和分词都讲过了,下面我们就来实战一下ES的核心功能-搜索,这节课我们主要讲的是基本搜索 _search(注意:ES的关键字都要加前缀_,所以我们在定义索引.类型名称时不要带 ...

  3. Flink(一)集群配置

    三台主机 centos6 已经完成的工作: 防火墙已关闭 主机名修改完毕,ssh免密登陆配置完成 jdk已安装 zookeeper已经部署并运行 hadoop已经部署并运行 版本:flink-1.8. ...

  4. Edge Computer:Vision and Challenges

    Abstract 随着物联网(Internet of Things)的蓬勃发展和云服务(cloud services)的成功,出现一种新的计算模式:edge computer.用于边缘网络数据的处理, ...

  5. SQL IN 运算符

    SQL IN 运算符 IN运算符允许您在WHERE子句中指定多个值. IN运算符是多个OR条件的简写. SQL IN 语法 SELECT column_name(s) FROM table_name ...

  6. PHP filter_list() 函数

    定义和用法 filter_list() 函数返回包含所有得到支持的过滤器的一个数组. 语法 filter_list() 提示和注释 注释:该函数的结果不是过滤器 ID,而是过滤器名称.请使用 filt ...

  7. TIM4定时器功能设置

    一.初始化过程 /*********************************************************************** 利用TIM4定时器作为计时,每个0.1 ...

  8. 快速搜索插件之quicksearch

    项目中如果遇到快速搜索table表格,select下拉框,ul>li列表等内容的时候,可以使用quicksearch快速搜索插件,举个栗子: 首先要引用jquery.js + jquery.qu ...

  9. Oracle架构实现原理、含五大进程解析(图文详解)

    目录 目录 前言 Oracle RDBMS架构图 内存结构 系统全局区SGA 高速缓存缓冲区数据库缓冲区 日志缓冲区 共享池 其他结构 进程结构 用户连接进程 用户进程User Process Ser ...

  10. A1082 Read Number in Chinese (25 分)

    1082 Read Number in Chinese (25 分)   Given an integer with no more than 9 digits, you are supposed t ...