IO流回顾与总结第一篇之字节流与字符流的操作。。。。。
一、引言
趁着年后的这点时间,抓紧点时间回顾下javase中的IO流,以往都是用到那些常用的IO类,这次来个全点的,有不对的地方还请大神指正一下,做到坚持写博的习惯来。。。。。。
回归正题,IO流顾名思义,就是输入流(input)与输出流(output),我们可以通过IO流中的一些类来实现从程序中读取外部的数据或者通过程序输出到外部的设备中
在IO流中我们可以进行分类,分别可以按照数据流的方向和数据单位进行分类,分类如下:
输入流 输出流
字节流 InputStream OutputStream
字符流 Reader Writer
上述四大基本流可以交叉进行连接
之前查看源码时发现上述四大基本流都是抽象的,不能直接使用,所以在他们的基础上,又派生出了很多具体功能的子类
注:在字节流和字符流中,1字符 = 2字节 、 1字节(byte) = 8位(bit) 、 一个汉字占两个字节长度,常识经常忘记
二、字符流代码示例
1、输出字符数据到文件中
以前对这些流总是弄混,后来发现我们可以从需求中找到一些规律,例如此刻的需求是需要字符数据到文件中,所以需要联想到Writer--->OutputStreamWriter--->FileWriter
流在读取文件时候,如果文件不存在则会自动的生成一个新的文件,如果已经存在,默认情况下会覆盖该文件,如果不想覆盖,需要在构造方法中进行明确的指定
Class FileWriterDemo{
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("D:\\123.txt");
fw.write("hello world!");
fw.flush(); //刷新缓冲区,可以多次写入多次刷新,刷新后可以再次写入数据
fw.write("beichen");
fw.close(); //flush和close的区别:flush刷新后可以继续输入,close刷新后不能继续输入。
}
}
2、从文件中读取数据
按照上面的套路,我们可以分析出需要使用Reader -- InputStreamReader -- FileReader
Class FileReaderDemo{
public static void main(String[] args) {
try {
FileReader fr = new FileReader("D:\\123.txt");
char[] ch=new char[100];
Reader read=new FileReader(f); int temp=0; int count=0; while((temp=read.read())!=(-1)){ ch[count++]=(char)temp; } read.close(); System.out.println("内容为"+new String(ch,0,count));}
catch (IOException e) {
system.out.println('失败')
}
}
}
三、字节流代码示例
对于电脑来讲,电脑只认识0和1,归根结底是对字节的处理
1、复制文件
Class FileCopy{
public static void main(String[] args){
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("D:\\123.txt");
fos = new FileOutputStream("D:\\1.txt");
byte[] copy = new byte[1024];
int len = 0;
while((len=fis.read(copy))!=-1) {
fos.write(copy,0,len);
}
}
catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("复制文件异常");
}
finally {
try {
if(fis!=null) fis.close();
}
catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("读取流");
}
}
}
}
四、字符流缓冲区代码示例
字符流的缓冲区可以分成:BufferReader、BufferWriter
先引用JDK文档概述:
对BufferReader,从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取
对BufferWriter,将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
综上我们可以看出来,缓冲区的出现时为了提高流的操作效率而出现的,在缓冲区中封装了一个数组,存入数据后可以一次取出
class BufferedReaderDemo {
public static void main(String[] args) throws IOException {
BufferedReader buf = new BufferedReader(
newInputStreamReader(System.in));
String str = null;
System.out.println("请输入内容");
try{
str = buf.readLine();
}catch(IOException e){
e.printStackTrace();
}
System.out.println("你输入的内容是:" + str);
}
}
五、缓冲区字节流代码示例
根据上面的规则我们也可以在文档出找出缓冲区的字节流分别是:BufferedInputStream、BufferedOutputStream
在此我就不进行代码的演示,可以参考缓冲区字符流进行编写
IO流回顾与总结第一篇之字节流与字符流的操作。。。。。的更多相关文章
- Java字节流和字符流,是时候总结一下IO流了
目录 从接收输入值说起 字节流读取 字符流读取 Scanner 读取 什么是 IO 流 字节流和字符流 字节流 字节输入流 字节输出流 缓冲流的原理 字符流 字符输入流 字符输出流 为什么字符流需要 ...
- Java基础:IO流之字节流和字符流
1. 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. 一个流,必有源端和目的端 ...
- Java字节流与字符流
九.字节流与字符流 9.1 IO的分类 <段落>根据数据的流向分为:输入流和输出流. 输入流 :把数据从其他设备上读取到内存中的流. 输出流 :把数据从内存 中写出到其他设备上的流. 数据 ...
- JAVA中的字节流与字符流
字节流与字符流的区别? 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用 ...
- 牛客网Java刷题知识点之输入流、输出流、字节流、字符流、字节流的抽象基类(InputStream、OutputStream)、字符流的抽象基类(Reader、Writer)、FileWriter、FileReader
不多说,直接上干货! IO流用来处理设备之间的数据传输. java对数据的操作是通过流的方式. java用于操作流的对象都在IO包中. IO流按操作数据分为两种:字节流和字符流. IO流按流向分为:输 ...
- JAVA IO 字节流与字符流
文章出自:听云博客 题主将以三个章节的篇幅来讲解JAVA IO的内容 . 第一节JAVA IO包的框架体系和源码分析,第二节,序列化反序列化和IO的设计模块,第三节异步IO. 本文是第一节. ...
- java.io中流的操作:字节流、字符流
java.io中流的操作:字节流.字符流(1)使用File类打开一个文件(2)通过字节流或字符流的子类指定输出的位置(3)进行读/写操作(4)关闭输入/输出 1.字节流:主要是byte类型数据,以by ...
- java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝
接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...
- 【Java IO流】字节流和字符流详解
字节流和字符流 对于文件必然有读和写的操作,读和写就对应了输入和输出流,流又分成字节和字符流. 1.从对文件的操作来讲,有读和写的操作——也就是输入和输出. 2.从流的流向来讲,有输入和输出之分. 3 ...
随机推荐
- 微信小程序之公共函数引入
// 加载配置文件 const config = require('../config.js'); module.exports = { //提醒弹框 REMIND:function(that = ' ...
- A Simple Problem with Integers~POJ - 3468
You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of op ...
- 异常-----freemarker.template.TemplateException: Macro select has no such argument
1.错误描述 六月 25, 2014 11:32:49 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template proc ...
- jquery中的下拉框
1.1select获取选中的value值 <label for="select"> <select id="key_RedemptionMode&quo ...
- hive查询结果输出到hdfs上
insert overwrite directory "/mapredOutput/UserYesterdayInterest/${hiveconf:day}"row format ...
- tablesorter 的使用
<table id="myTable" class="tablesorter"> <thead> <tr> <th&g ...
- Android中selector的使用
第一种方法(强烈推荐) 方法:selector做遮罩,原图做background. 我们做按钮的时候经常需要用两个图片来实现按钮点击和普通状态的样式,这就需要提供两种图片,而且每个分辨率下还有多套图片 ...
- 【BZOJ1717】产奶的模式(后缀数组)
[BZOJ1717]产奶的模式(后缀数组) 题面 权限题 hihocoder 洛谷 题解 \(hihocoder\)里面讲的非常好了 这题要求的就是最长可重叠重复K次子串 所谓相同的子串 我们可以理解 ...
- 【BZOJ2330】【SDOI2012】糖果(差分约束,SPFA)
[BZOJ2330][SDOI2012]糖果 题面 题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要 ...
- CentOS7下安装MySQL的安装与配置(yum) (转)
原文链接:http://www.centoscn.com/mysql/2016/0626/7537.html 1.配置YUM源 在MySQL官网中下载YUM源rpm安装包:http://dev.mys ...