Java中I/O的分析
Java中I/O的原理:
在java程序中,对于数据的输入/输出操作以”流“的方式进行的。
流是内存中一组有序数据序列
Java将数据从源读入到内存当中,形成了流,然后这些流可以写到目的地。
Java中流按功能分为:节点流(原始流)和处理流(包裹流)
处理流是在节点流的基础上提供了更加强大的读写功能
Java中流按处理数据的不同分为字节流和字符流
字节流:以字节为单位来处理数据的,字节流数据为8位,一般用于对二进制的数据的读写,例如声音,图像等。
字符流:以字符为单位来处理数据的,一般用于读写文本文件的
字节流
- 字节流的基类是抽象类InputStream和OutpuStream。
- InputStream用于输入,OutputStream用于输出。
package src;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test {
public static void main(String[] args) {
//输入外->内,读入数据,输出:内->外,写数据
//任务:从file1文件读取数据到内存,a.输出到控制台验证,b.输出到file2文件中
//1,创建一个给予file1的文件对象,,创建一个给予file2的文件对象,
File f1=new File("c:\\file1.txt");
File f2=new File("c:\\file2.txt");
//2、 建立一个基于c:\\file1.txt文件的输入通道fis,建立一个基于c:\\file2.txt文件的输 出通道fos,
try {
FileInputStream fis=new FileInputStream(f1);
FileOutputStream fos=new FileOutputStream(f2);
//3、把通道fis数据读入到内存,从内存写到file2文件
int m;
while((m=fis.read())!=-1)
{
fos.write(m);
}
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}

其它方法:
字节流子处理流
字符流
package src; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; public class Test { public static void main(String[] args) { File f1=new File("d:\\file1.txt"); File f2=new File("d:\\file2.txt"); try {
FileReader fis=new FileReader(f1);
FileWriter fos=new FileWriter(f2); int m;
while((m=fis.read())!=-1)
{
//输出到控制台上
//System.out.print((char)(m));
//输出到file2.txt文件上
fos.write((char)(m));
} } catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
字符流之处理流
系统类及流的概念
System类是Java语言中一个功能强大、非常有用的类,它提供了
标准输入/输出及运行时的系统信息。从System类不能创建对象,也
就是说,System类的所有属性和方法都是静态的,引用时要以
System作为前缀。System.in与System.out是System类的两个静态
属性,分别对应系统的标准输入/输出流。
其中,System.in称为标准输入流,用于程序输入,通常读取用户
从键盘输入的信息;System.out称为标准输出流,用于程序输出,
通常向用户显示信息;System.err称为标准错误流,用于向用户显示
出错信息。
package src;
import java.io.IOException;
public class Test {
public static void main(String[] args) {
System.out.println("请输入数据:");
try {
int i = System.in.read();
System.out.println("输入的数据为:"+(char)i);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//读取控制台信息到文件中去,当输入“q”时退出
package src; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; public class Test { public static void main(String[] args) { File f = new File("d:\\file1.txt");
try {
FileOutputStream fop = new FileOutputStream(f);
while(true){
//创建缓冲数组
byte[] b = new byte[1024];
System.out.println("请输入数据:");
//将输入的数据放入缓冲区中,返回输入的字符串
int len = System.in.read(b);
if(b[0]=='q'){
System.out.println("退出");
break;
}else{
//将数据从0偏移开始读取len个字符
fop.write(b, 0, len);
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
数据流
DataInputStream类

缓冲流(字符流)
转换流

Java中I/O的分析的更多相关文章
- Java中ArrayList源码分析
一.简介 ArrayList是一个数组队列,相当于动态数组.每个ArrayList实例都有自己的容量,该容量至少和所存储数据的个数一样大小,在每次添加数据时,它会使用ensureCapacity()保 ...
- Java中json工具对比分析
Java中几个json工具分析 1, 环境 JDK1.6+IDE(IntelliJ IDEA)+windowsXP+GBK编码 2,分析对象 jackson1.8.2 http://jackson.c ...
- Eclipse中的快捷键快速生成常用代码(例如无参、带参构造,set、get方法),以及Java中重要的内存分析(栈、堆、方法区、常量池)
(一)Eclipse中的快捷键: ctrl+shift+f自动整理选择的java代码 alt+/ 生成无参构造器或者提升信息 alt+shift+s+o 生成带参构造 ctrl+shift+o快速导 ...
- 大杂烩 -- Java中Iterator的fast-fail分析
基础大杂烩 -- 目录 Java中的Iterator非常方便地为所有的数据源提供了一个统一的数据读取(删除)的接口,但是新手通常在使用的时候容易报如下错误ConcurrentModificationE ...
- Java中的<< 和 >> 和 >>> 分析理解
Java中的<< 和 >> 和 >>> 详细分析 <<表示左移移,不分正负数,低位补0: 注:以下数据类型默认为byte-8位 左移时不管正负,低 ...
- Java中关于“=”和“==”的分析
Java中变量分为普通原始变量(int char float等)和对象 一"=" (1)普通原始变量 普通原始变量的声明和赋值语句例如以下 int a=3; int b=a; 此时 ...
- Java中Iterator的fast-fail分析
1.fail-fast简介 fail-fast机制是java集合(Collection)中的一个错误机制.当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件. 例如:当某一个线 ...
- Java中的递归原理分析
解释:程序调用自身的编程技巧叫做递归. 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用 ...
- java中i=i++问题分析
http://www.ticmy.com/?p=43 重点:局部变量表 和 操作数栈的执行过程. 使用javac编译后再使用javap -c Test反编译这个类查看它的字节码,如下(只摘取main方 ...
随机推荐
- 使用jQuery实现简单的拖动效果
转自:http://www.muzilei.com/archives/136 如何实现拖动效果? 浏览DEMO 首先分析下拖动效果原理: 1.当鼠标在被拖动对象上按下鼠标(触发onmousedown事 ...
- [转]NHibernate之旅(10):探索父子(一对多)关联查询
本节内容 关联查询引入 一对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 关联查询引入 在NHibernate中提供了三种查询方式给我们选择:NH ...
- jQuery获取属性之自己遇到的问题
刚开始是这种写法 用的 attr 结果获取不到 if($("#reg_username_span").attr("display") == 'block') ...
- Unity优化之纹理集
发现了一个比较好用的插件:ProDrawCallOptimizer. 它是用来合并纹理和材质的,而且用起来非常简便. 操作方法: 1.将包拖入Unity5中:ps:由于版本问题,直接双击包时导入不了 ...
- JavaScript高级程序设计56.pdf
选择选项 对于只允许选择一项的选择框,访问选中项最简单的方式是selectedIndex属性 var selectedOption=selectbox.options["selectbox. ...
- Bzoj 2789: [Poi2012]Letters 树状数组,逆序对
2789: [Poi2012]Letters Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 278 Solved: 185[Submit][Stat ...
- Kth Ancestor 第k个祖先问题
题目出处 这道题目出自hackerrank的8月月赛的第三题. 题目大意: 先给出一棵树 之后有三种操作分别为:加边,查询,和删除一个节点 查询的时候要给出任意节点x的第k个祖先 每组数据有t个cas ...
- 3 weekend110的job提交的逻辑及YARN框架的技术机制 + MR程序的几种提交运行模式
途径1: 途径2: 途径3: 成功! 由此,可以好好比较下,途径1和途径2 和途径3 的区别. 现在,来玩玩weekend110的joba提交的逻辑之源码跟踪 原来如此,weekend110的job提 ...
- Makefile详解--隐含规则
Makefile详解--隐含规则(转) Makefile系列文章,这里有个前辈连续洗了一个系列来介绍,共有26篇博客文章. http://www.cppblog.com/ivenher/archive ...
- labview中层叠式顺序结构与平铺式顺序结构有什么不同?
也就看着不同,平铺式看着直观,但比较占地方,程序复杂了就显得过大.二者可互相转换,从这点也可以看出它们没有本质不同!