javaIO--字节流
流---是指的一组有序的、有气垫和重点的字节集合,是对的护具传输的总称或者抽象。
流采用缓冲区技术,当写一个数据时,系统将数据发送到缓冲区而不是外部设备(如硬盘),当读一个数据时,系统实际是从缓冲区读取数据的。
流的存在:我们都知道输入流和输出流,二者的定义都是基于数据流向且是以内存为坐标的。标准输入过程中,数据从键盘等输入设备流向内存,这事输入流。标准输出过程中,数据从内存输出到显示器或者打印机等设备,这是输出流。
流分为字节流和字符流
下边主要讲标准输入输出、文件字节流、数据字节流和对象字节流四种字节流。
public class IOtest {
public static void main(String[] args) throws IOException {
// KeyboardInput();
// byte[] buffer = {0,1,2,3,4,5,6,7,8,9};
// ByteFile afile = new ByteFile("info.txt");
// afile.writeToFile(buffer);
// afile.readFromFile();
// afile.copyFile("io2.txt");
// IntFile afile = new IntFile("fileInt.txt");
// afile.writeToFile();
// afile.readFromFile();
Student stus[] = {new Student("张三", "男"), new Student("李四", "女"), new Student("王五", "女博士")};
objectFile afile = new objectFile("students.dat");
afile.writeToFile(stus);
System.out.println("stus: \n" + afile.readFromFile());
}
//标准输入输出
public static void KeyboardInput() throws IOException{
System.out.print("Input:");
byte buffer[] = new byte[512]; //以字节数组作为缓冲区
int count = System.in.read(buffer);
System.out.print("Output:");
for(int i=0; i<count; i++){
System.out.print(" " + buffer[i]);
}
System.out.println("\ncount = " + count);
for(int i=0; i<count; i++){
System.out.print((char)buffer[i]);
}
}
//文件字节流
static class ByteFile{
public String filename;
public ByteFile(String filename){
this.filename = filename;
}
//字节流写
public void writeToFile(byte[] buffer) throws IOException{
FileOutputStream fout = new FileOutputStream(this.filename);
fout.write(buffer);
fout.close();
}
//字节流读
public void readFromFile() throws IOException{
FileInputStream fin = new FileInputStream(this.filename);
System.out.print(this.filename + ":");
byte[] buffer = new byte[512];
int count=0;
while(count != -1){
count = fin.read(buffer); //read返回值为字节数目,当为空时 返回-1
for(int i=0; i<count; i++){
System.out.print(buffer[i] + " ");
}
System.out.println(" count = " + count);
}
fin.close();
}
//文件字节流复制到filename2
public void copyFile(String filename2) throws IOException{
FileInputStream fin = new FileInputStream(this.filename);
FileOutputStream fout = new FileOutputStream(filename2);
byte[] buffer = new byte[512];
int count = fin.read(buffer); //读取输入流并返回流的大小
while(count != -1){
fout.write(buffer, 0, count);
count = fin.read(buffer);
}
fin.close();
fout.close();
System.out.println("Copy file from " + this.filename + " to " + filename2);
}
}
//数据字节流(举例 整形)
//把fibonacci序列值写入指定文件
static class IntFile{
public String filename;
public IntFile(String filename){
this.filename = filename;
}
public void writeToFile() throws IOException{
FileOutputStream fout = new FileOutputStream(this.filename);
DataOutputStream dout = new DataOutputStream(fout);
short i=0,j=1;
do{
dout.writeInt(i);
dout.writeInt(j);
i = (short)(i+j);
j = (short)(i+j);
}while(i>0);
dout.close();
fout.close();
}
public void readFromFile() throws IOException{
FileInputStream fin = new FileInputStream(this.filename);
DataInputStream din = new DataInputStream(fin);
System.out.println(this.filename + ": ");
while(true){
try {
int i = din.readInt();
System.out.print(i + " ");
} catch (Exception e) {
break;
}
}
din.close();
fin.close();
}
}
//对象字节流
//使用对象字节流读写多个学生对象到某个指定文件
static class objectFile{
String filename;
public objectFile(String filename){
this.filename = filename;
}
public void writeToFile(Object[] objs) throws IOException{
FileOutputStream fout = new FileOutputStream(this.filename);
ObjectOutputStream obout = new ObjectOutputStream(fout);
for(int i = 0; i<objs.length; i++){
obout.writeObject(objs[i]);
}
obout.close();
fout.close();
}
public String readFromFile() throws IOException{
FileInputStream fin = new FileInputStream(this.filename);
ObjectInputStream obin = new ObjectInputStream(fin);
System.out.println(this.filename + ": ");
String str = "";
while(true){
try {
str += obin.readObject().toString() + "\n";
} catch (Exception e) {
break;
}
}
obin.close();
fin.close();
return str;
}
}
public static class Student implements Serializable{//内部类 学生对象
private String name;
private String sex;
public Student(String name, String sex){
this.name = name;
this.sex = sex;
}
public String toString(){
return "姓名: " + this.name + " 性别: " + this.sex;
}
}
}
javaIO--字节流的更多相关文章
- Java-IO 字节流的使用和效率比较
打算做一个系列,前面讲了基本的字符流的用法,这篇博客介绍一下字节流的基本用法: 一.基本使用: 基本字节流: FileInputStream FileOutputStream BufferedIn ...
- javaio字节流复制文件夹
public class Copy1 { public static void main(String[] args) throws IOException { File src=new File(& ...
- JavaIO学习:字节流
JavaIO流之字节流 字节流 抽象基类:InputStream,OutputStream. 字节流可以操作任何数据. 注意: 字符流使用的数组是字符数组,char[] chs : 字节流使用的数组是 ...
- java基础知识回顾之javaIO类---FileInputStream和FileOutputStream字节流复制图片
package com.lp.ecjtu; import java.io.FileInputStream; import java.io.FileNotFoundException; import j ...
- javaIO(05)字节流和字符流的区别
字节流和字符流的区别: 直接根据图片得出结论: 结论: 字节流在操作时本身不会用到缓存区,是在文件本身直接操作的,而字符流在操作时使用了缓存区,通过缓存区在操作文件: 所以在操作字符流的时候 ...
- JavaIO(03)字节流--OutputStream and InputStream
IO概述: IO流用来处理设备之间的数据传输 java对数据的操作是通过流的方式 java用于操作流的对象都在IO包中 流按操作数据分为两种:字节流与字符流(编码表) 流按流向分为:输入流,输出流 ...
- Java基础---Java---IO流-----LineNumberReader方法及原理、自定义一个LineNumberReader、字节流、图片复制、mp3复制、
LineNumberReader 跟综行号的缓冲字符输入流,些类定义了setLineNumber(int)和getLineNumber(int),它们可分别用于设置和获取当前行号 import jav ...
- 总结JAVA----IO流中的字节流
对于IO流中字节流的总结 字节流的概念 由于应用程序,经常需要和文件打交道,所以Inputstream专门提供了读写文件的子类:FileInputStream和FileOutputStream类,如果 ...
- java-IO流-字节流-概述及分类、FileInputStream、FileOutputStream、available()方法、定义小数组、BufferedInputStream、BufferedOutputStream、flush和close方法的区别、流的标准处理异常代码
1.IO流概述及其分类 * 1.概念 * IO流用来处理设备之间的数据传输 * Java对数据的操作是通过流的方式 * Java用于操作流的类都在IO包中 * ...
- JavaIO流原理之常用字节流和字符流详解以及Buffered高效的原理
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827509.html Java的流体系十分庞大,我们来看看体系图: 这么庞大的体系里面 ...
随机推荐
- laravel 闪存
https://blog.csdn.net/ckdecsdn/article/details/52083093
- Wake-Sleep(W-S)算法【转载】
原文: https://www.zhihu.com/question/29648549 https://blog.csdn.net/zouxy09/article/details/8775518 en ...
- 【原创】Odoo开发文档学习之:构建接口扩展(Building Interface Extensions)(边Google翻译边学习)
构建接口扩展(Building Interface Extensions) 本指南是关于为Odoo的web客户创建模块. 要创建有Odoo的网站,请参见建立网站;要添加业务功能或扩展Odoo的现有业务 ...
- 北京Uber优步司机奖励政策(3月20日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 6 生成器 yield 协程
1.生成器 ----> 1 b = [x*2 for x in range(100000000000)] MemoryError: 想生成一个存放很多数据的列表,但是又不想内存占用太多 每次用一 ...
- agc 027 B - Garbage Collector
B - Garbage Collector https://agc027.contest.atcoder.jp/tasks/agc027_b 题意: x坐标轴上n个垃圾,有一个机器人在从原点,要清扫垃 ...
- SpringBoot学习:整合MyBatis,使用Druid连接池
项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 (一)添加pom依赖: <!-- https://mvnrepository.co ...
- 使用QUIC
QUIC是Google新开发的一个基于UDP的协议,它提供了像TCP一样的传输可靠性保证,可以实现数据传输的0-RTT延迟,灵活的设计使我们可以对它的拥塞控制及流量控制做更多的定制,它还提供了传输的安 ...
- thinkphp5
分页: thinkphp5分页默认只带page参数 在使用form表单method='get'传递关键字来筛选: 保证每次刷新依旧带上筛选参数 但遇到分页时,下面的分页默认自带page,没有之前筛选的 ...
- mongdb数据迁移导出与导入
导出: mongoexport --host localhost --port --username un1 --password pwd1 --db db1 --collection col1 -- ...