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

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

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

流分为字节流和字符流

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

 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. TinyMCE:下载、安装、配置

    第一步:下载 官网下载:https://www.tiny.cloud/download/ TinyMCE从4.0开始,不再支持直接下载,而是直接使用提供免费的CDN,让用户免除安装过程,可以在网站中使 ...

  2. h5开发中所遇到的兼容性及所遇到的常见问题

    1. 移动端border1px问题 <script> var viewport = document.querySelector("meta[name=viewport]&quo ...

  3. Python基础、条件语句和基本数据类型

    1. 第一句python - 后缀名是可以是任意? - 导入模块时,如果不是.py文件 ==> 以后文件后缀名是 .py 2. 两种执行方式 python解释器 py文件路径 python 进入 ...

  4. 流程控制之--if。

    假如把写程序比做走路,那我们到现在为止,一直走的都是直路,还没遇到过分叉口,想象现实中,你遇到了分叉口,然后你决定往哪拐必然是有所动机的.你要判断那条岔路是你真正要走的路,如果我们想让程序也能处理这样 ...

  5. Python学习笔记八:文件操作(续),文件编码与解码,函数,递归,函数式编程介绍,高阶函数

    文件操作(续) 获得文件句柄位置,f.tell(),从0开始,按字符数计数 f.read(5),读取5个字符 返回文件句柄到某位置,f.seek(0) 文件在编辑过程中改变编码,f.detech() ...

  6. 【转载++】C/C++错误分析errno,perror,strerror和GetLastError()函数返回的错误代码的意义

    本文是上一篇“fopen返回0(空指针NULL)且GetLastError是0”的侧面回应.听赶来多么地正确和不容置疑,返回NULL时调用GetLastError来看看报错啊,但当时却返回了0,大家都 ...

  7. mybatis入门(一):jdbc的缺点

    mybatis的基础内容 1.mybatis的框架原理 2.mybatis开发dao两种方法: a.原始dao开发方法(程序需要编写dao接口和dao实现类) b.mybatis的mapper接口(相 ...

  8. 从Github开源项目《云阅》所学到的知识

    感谢开源,感谢大神,才让我们这些菜鸟成长! 附上云阅开源项目地址:点我吧. 1.轮播图的实现. 现在的APP基本都会实现这个功能吧,然后一直都找不到好的第三方库,能够满足各种需求.然而碰到了这个开源库 ...

  9. 20154327 Exp6 信息搜集与漏洞扫描

    基础问题回答 (1)哪些组织负责DNS,IP的管理. 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器.DNS和IP地址管理. 全球根域名服务器:绝大多数在欧洲和北美(全球13 ...

  10. 成都Uber优步司机奖励政策(1月24日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...