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 ...
随机推荐
- Android的sdk、api及工程目录说明
SDK下包的说明1:add-ons:Android开发需要的第三方文件和软件库2:docs:Android的文档.包括开发指南.API参考.资源等3:extras:扩展的附加包4:platforms: ...
- Python实现常用的数据结构
Python中的数据结构 #巧用Python列表特性实现特定数据结构 #栈实现stack = []stack.push(x)stack.pop()stack[-1] #队列实现from colle ...
- C# 图解教程 第一章 C#和.NET框架
C#和.NET框架 在.NET之前.NET时代 .NET框架的组成大大改进的编程环境 编译成CIL编译成本机代码并执行CLR Common Language RuntimeCLI Common Lan ...
- Python基础__Python语法基础、条件、循环
之前主要讨论的是Python的对象,这本节将第一次走进Python的语言之旅,将会介绍条件与循环.本节我们将会涉及到复合语句,简要介绍一下Python的语法规则是有必要的Python语法规则 1.语句 ...
- Python Cookbook(第3版)中文版:15.16 不确定编码格式的C字符串
15.16 不确定编码格式的C字符串¶ 问题¶ 你要在C和Python直接来回转换字符串,但是C中的编码格式并不确定. 例如,可能C中的数据期望是UTF-8,但是并没有强制它必须是. 你想编写代码来以 ...
- Link带参数的Verilog模块(Design Compiler)
在Design Compiler中,Verilog文件可以用read_verilog命令读入,用link命令连接.以下是连接两个文件RegisterFile.v和Test.v的脚本: # Read d ...
- JDK 9.0.4安装过程
因为种种问题,怀疑是因为JDK版本不对劲,于是打算将JDK重新搞一下. 不看不知道,看了吓一跳,我的笔记本里现在起码有5.6甚至更多个JDK,JRE,并且由于年久失修,我也不知道这些东西怎么装上去的, ...
- [BZOJ1016] [JSOI2008] 最小生成树计数 (Kruskal)
Description 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的 ...
- [BZOJ1051] [HAOI2006] 受欢迎的牛 (强联通分量)
Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也 ...
- 纯css实现图片的灯光照射效果,高逼格图片展示
先不说技术,看实现的效果, 与原图(左图)相比,‘灯光’ 照射(右图)下的小姐姐是不是更有魅力了!! 那么下面就说说大家关心的技术实现过程. 其实这是我在学习css属性 mix-blend-mode ...