流---是指的一组有序的、有气垫和重点的字节集合,是对的护具传输的总称或者抽象。

流采用缓冲区技术,当写一个数据时,系统将数据发送到缓冲区而不是外部设备(如硬盘),当读一个数据时,系统实际是从缓冲区读取数据的。

流的存在:我们都知道输入流和输出流,二者的定义都是基于数据流向且是以内存为坐标的。标准输入过程中,数据从键盘等输入设备流向内存,这事输入流。标准输出过程中,数据从内存输出到显示器或者打印机等设备,这是输出流。

流分为字节流和字符流

下边主要讲标准输入输出、文件字节流、数据字节流和对象字节流四种字节流。

 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--字节流的更多相关文章

  1. Java-IO 字节流的使用和效率比较

    打算做一个系列,前面讲了基本的字符流的用法,这篇博客介绍一下字节流的基本用法: 一.基本使用: 基本字节流: FileInputStream   FileOutputStream BufferedIn ...

  2. javaio字节流复制文件夹

    public class Copy1 { public static void main(String[] args) throws IOException { File src=new File(& ...

  3. JavaIO学习:字节流

    JavaIO流之字节流 字节流 抽象基类:InputStream,OutputStream. 字节流可以操作任何数据. 注意: 字符流使用的数组是字符数组,char[] chs : 字节流使用的数组是 ...

  4. java基础知识回顾之javaIO类---FileInputStream和FileOutputStream字节流复制图片

    package com.lp.ecjtu; import java.io.FileInputStream; import java.io.FileNotFoundException; import j ...

  5. javaIO(05)字节流和字符流的区别

    字节流和字符流的区别:   直接根据图片得出结论: 结论:   字节流在操作时本身不会用到缓存区,是在文件本身直接操作的,而字符流在操作时使用了缓存区,通过缓存区在操作文件:  所以在操作字符流的时候 ...

  6. JavaIO(03)字节流--OutputStream and InputStream

    IO概述:   IO流用来处理设备之间的数据传输 java对数据的操作是通过流的方式 java用于操作流的对象都在IO包中 流按操作数据分为两种:字节流与字符流(编码表) 流按流向分为:输入流,输出流 ...

  7. Java基础---Java---IO流-----LineNumberReader方法及原理、自定义一个LineNumberReader、字节流、图片复制、mp3复制、

    LineNumberReader 跟综行号的缓冲字符输入流,些类定义了setLineNumber(int)和getLineNumber(int),它们可分别用于设置和获取当前行号 import jav ...

  8. 总结JAVA----IO流中的字节流

    对于IO流中字节流的总结 字节流的概念 由于应用程序,经常需要和文件打交道,所以Inputstream专门提供了读写文件的子类:FileInputStream和FileOutputStream类,如果 ...

  9. java-IO流-字节流-概述及分类、FileInputStream、FileOutputStream、available()方法、定义小数组、BufferedInputStream、BufferedOutputStream、flush和close方法的区别、流的标准处理异常代码

    1.IO流概述及其分类 * 1.概念      * IO流用来处理设备之间的数据传输      * Java对数据的操作是通过流的方式      * Java用于操作流的类都在IO包中      *  ...

  10. JavaIO流原理之常用字节流和字符流详解以及Buffered高效的原理

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827509.html      Java的流体系十分庞大,我们来看看体系图:        这么庞大的体系里面 ...

随机推荐

  1. Hbase 表的Rowkey设计避免数据热点

    一.案例分析 常见避免数据热点问题的处理方式有:加盐.哈希.反转等方法结合预分区使用. 由于目前原数据第一字段为时间戳形式,第二字段为电话号码,直接存储容易引起热点问题,通过加随机列.组合时间戳.字段 ...

  2. robotframework+appium,数字键盘输入问题,keycode,press keycode

    需要注意事项 appium自带的输入法应该是无法模拟控制键和基本键的,需要自行使用adb切换成搜狗或者android输入法,然后case完成之后记得切回appium输入法 appium模拟发送基本键命 ...

  3. 浅显易懂的Sysnchronizd用法

    <编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程>一文详细讲述了线程.进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础.本文将接着讲一下Java线程同步中的一 ...

  4. shazam音乐检索算法 附完整c代码

    在讲算法之前,上一些前人的资料. http://coding-geek.com/how-shazam-works/ https://laplacian.wordpress.com/2009/01/10 ...

  5. 20145202马超 2016-2017-2《Java程序设计》课程总结

    学号 2016-2017-2<Java程序设计>课程总结 (按顺序)每周作业链接汇总 预备作业1(http://www.cnblogs.com/tuolemi/p/6193756.html ...

  6. C++ STL中的 Set的用法

    https://blog.csdn.net/yas12345678/article/details/52601454 -----源头此处 1.关于set的概念   set   是STL中的集合. 集合 ...

  7. 本地生成Rails API文档

    #新建一rails项目 rails new dummy cd dummy # 生成文档 rake doc:rails 剩下的就是等待了. 生成的文档在dummp/doc/api .浏览器打开index ...

  8. linux进程的学习笔记(未完)

    1. 进程是程序执行的一个实例,如果16个用户同时运行vi,那么有16个独立的进程,尽管它们共享同一个可执行代码,问题在于FreeRTOS这种系统,是否可以建2个相同的任务,需要注意什么?在linux ...

  9. Android 模拟器 下载、编译及调试

    Android 模拟器源码下载 Android 模拟器源码的下载与 Android AOSP 源码库的下载过程类似,可以参考 Google 官方提供的 Android 源码下载文档 来了解这个过程. ...

  10. 【Mybatis】 逆向生成工程

    前言: 必需学会Maven and SQL基础知识 简介: 通过 Maven, Mybatis 逆向生成 Pojo, Mapper, Example(本章屏蔽了) 工具: JDK8 apache-ma ...