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的流体系十分庞大,我们来看看体系图: 这么庞大的体系里面 ...
随机推荐
- vscode vue 项目保存运行lint进行代码修正
{ "editor.tabSize": 2, "files.associations": { "*.vue": "vue" ...
- telent connection refused
1.问题场景 Centos7 做flume案例时,telnet hadoop-senior03.itguigu.com 44444 总是Connection redused, Trying 192.1 ...
- 使用JAX-WS(JWS)发布WebService(一)
JAX-WS概述: 通过Main发布一个简单WebService: JAX-WS(Java API for XML Web Services)规范是一组XML web services的JAVA AP ...
- java入门---对象和类&概念详解&实例
Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 这篇文章,我们主要来看下: 对象:对象是类的一个实例(对象不是找个女朋友),有状态 ...
- CSS 兼容iPhone X、iPhone XS及iPhone XR
@media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ra ...
- 20145234黄斐《Java程序设计》第三周学习总结
教材学习内容总结 类与对象 定义:对象,与过程相对. Java中变量有2种类型,一个是基本类型,另一个则是类类型.基本类型在之前学过,本次学习类类型.使用Java撰写程序几乎都是在使用对象,要产生对象 ...
- 不搭建git服务器对git仓库进行局域网内共享多人合作开发项目
有时候在一个临时局域网内没有搭建git服务器,但是又想多人开发一个项目,此时只要每个人电脑安装有git客户端,参考一下方法即可尝试建一个本地化的远程仓库进行多人开发工作. 远程仓库通常只是一个裸仓库( ...
- 【LG2495】[SDOI2011]消耗战
[LG2495][SDOI2011]消耗战 题面 洛谷 题解 参考博客 题意 给你\(n\)个点的一棵树 \(m\)个询问,每个询问给出\(k\)个点 求将这\(k\)个点与\(1\)号点断掉的最小代 ...
- springboot 读写excel
添加两个坐标: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</a ...
- kaggle入门--泰坦尼克号之灾(手把手教你)
作者:炼己者 具体操作请看这里-- https://www.jianshu.com/p/e79a8c41cb1a 大家也可以看PDF版,用jupyter notebook写的,视觉效果上感觉会更棒 链 ...