文档章节

Java学习日志(21-1-IO流-序列化、管道流与随机读取)

Almon
 Almon
发布于 2016/10/10 11:09
字数 607
阅读 2
收藏 0

对象的序列化

//建立对象
import java.io.*;
class Person implements Serializable{
	// 固定ID,私有化后仍可引用
	public static final long serialVersionUID=421;
	private String name;
	// 被transient修饰则不再序列化
	transient int age;
	static String country="cn";
	Person(String name,int age,String country){
		this.name=name;
		this.age=age;
	}
	public String toString(){
		return name+":"+age+":"+country;
	}
}

//序列化
import java.io.*;
class ObjectStreamDemo{
	public static void main(String[] args)throws Exception{
		// writeObj();
		readObj();
	}
	
	public static void readObj()throws Exception{
		ObjectInputStream ois=new ObjectInputStream(new FileInputStream("obj.txt"));
		Person p=(Person)ois.readObject();
		System.out.println(p);
		ois.close();
	}
	
	public static void writeObj()throws IOException{
		ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("obj.txt"));
		oos.writeObject(new Person("lisi",39,"cn"));
		oos.close();
	}
}

管道流

    PipedlnputStream    PipedOutputStream

    需要调用线程运行

import java.io.*;
class Read implements Runnable{
	private PipedInputStream in;
	Read(PipedInputStream in){
		this.in=in;
	}
	public void run(){
		try{
			byte[]buf=new byte[1024];
			int len=in.read(buf);
			String s=new String(buf,0,len);
			System.out.println(s);
			in.close();
		}
		catch(IOException e){
			throw new RuntimeException("管道读取流失败");
		}
	}
}
class Write implements Runnable{
	private PipedOutputStream out;
	Write(PipedOutputStream out){
		this.out=out;
	}
	public void run(){
		try{
			out.write("oioed laile".getBytes());
		}
		catch(IOException e){
			throw new RuntimeException("管道输出流失败");
		}
	}
}

class PipedStreamDemo{
	public static void main(String[] args)throws IOException{
		PipedInputStream in=new PipedInputStream();
		PipedOutputStream out=new PipedOutputStream();
		in.connect(out);
		Read r=new Read(in);
		Write w=new Write(out);
		
		new Thread(r).start();
		new Thread(w).start();
	}
}

RandomAccessFile

    该类不算IO的子类,直接继承自Object

    具备读和写的功能,内部封装了一个数组,通过指针对数组的元素进行操作

    可以通过getFilePointer获取指针位置,seek改变指针位置

    完成读写的原理就是内部封装了字节输入列和输出流

    通过构造函数可以看出,该类只能操作文件

    而且操作文件还有模式:只读r,,读写rw等

    如果模式为r,不会创建文件,会读取一个已存在的文件,如果不存在则出现异常

    如果模式为rw,操作的文件不存在,则会自动创建,如果存在不会覆盖

    可以实现数据的分段写入

import java.io.*;
class RandomAccessFileDemo{
	public static void main(String[] args)throws Exception{
		// writeFile();
		writeFile_2();
		// readFile();
		
	}
	
	public static void readFile()throws Exception{
		RandomAccessFile raf=new RandomAccessFile("ran.txt","r");
		// 调整指针,即开始读取的位数
		// raf.seek(8);
		
		// 跳过指定的字节数,不能往回跳
		raf.skipBytes(8);
		
		// 读取数组
		byte[]buf=new byte[4];
		raf.read(buf);
		String name=new String(buf);
		int age=raf.readInt();
		System.out.println("name  "+name);
		System.out.println("age  "+age);
		raf.close();
	}
	
	public static void writeFile_2()throws IOException{
		RandomAccessFile raf=new RandomAccessFile("ran.txt","rw");
		raf.seek(8*3);
		raf.write("周期".getBytes());
		raf.writeInt(103);
		
		raf.close();
	}
	
	public static void writeFile()throws Exception{
		RandomAccessFile raf=new RandomAccessFile("ran.txt","rw");
		raf.write("李四".getBytes());
		raf.writeInt(97);
		raf.write("王五 ".getBytes());
		raf.writeInt(99);
		raf.close();
	}
}

 

© 著作权归作者所有

Almon
粉丝 2
博文 78
码字总数 55788
作品 0
江北
私信 提问
【Java IO】初识字节流和字符流

说到IO,在我们工作中是经常遇到的,比如文件的上传、网络的数据传输、系统的日志记录等,俯拾皆是。Java里面是怎么实现IO的,今天我们一起学习下。 Java种IO是通过流的方式实现的,流可以理...

火拳-艾斯
04/12
0
0
java基础io流——配角也风流(不求甚解)

本章简单介绍几个常见的io流派生。 1:数据操作流(操作基本类型数据的流)(理解) 代码示例: 2:内存操作流(理解) 用于处理临时存储信息的,程序结束,数据就从内存中消失。 代码示例: 注:查看...

潇潇漓燃
2018/05/30
0
0
Java IO总结(未完待续)

1.Java IO四个重要抽象类 (1) InputStream(字节输入流) (2) Reader(字符输入流) (3) OutputStream (4) Writer 2.文件相关 (1) 创建File对象:File() (2) 创建、删除文件:...

Taisuke
2014/06/25
0
2
JAVASE之JAVAI/O流篇

一 Java IO IO流用来处理设备之间的数据传输。 Java程序中,对于数据的输入/输出操作以”流(stream)” 的方式进行。 java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标...

刘信坚
2018/07/30
0
0
Java I/O不迷茫,一文为你导航!

前言:在之前的面试中,每每问到关于Java I/O 方面的东西都感觉自己吃了大亏..所以这里抢救一下..来深入的了解一下在Java之中的 I/O 到底是怎么回事..文章可能说明类的文字有点儿多,希望能耐...

我没有三颗心脏
2018/08/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Angular 英雄编辑器

应用程序现在有了基本的标题。 接下来你要创建一个新的组件来显示英雄信息并且把这个组件放到应用程序的外壳里去。 创建英雄组件 使用 Angular CLI 创建一个名为 heroes 的新组件。 ng gener...

honeymoose
今天
5
0
Kernel DMA

为什么会有DMA(直接内存访问)?我们知道通常情况下,内存数据跟外设之间的通信是通过cpu来传递的。cpu运行io指令将数据从内存拷贝到外设的io端口,或者从外设的io端口拷贝到内存。由于外设...

yepanl
今天
6
0
hive

一、hive的定义: Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再在Hadoop平台上运行,达到快速开发的目的 Hive中的表是纯逻辑表,就只是表的定义,即表的元数据。本质就是Hadoop的目...

霉男纸
今天
3
0
二、Spring Cloud—Eureka(Greenwich.SR1)

注:本系列文章所用工具及版本如下:开发工具(IDEA 2018.3.5),Spring Boot(2.1.3.RELEASE),Spring Cloud(Greenwich.SR1),Maven(3.6.0),JDK(1.8) Eureka: Eureka是Netflix开发...

倪伟伟
昨天
13
0
eclipse常用插件

amaterasUML https://takezoe.github.io/amateras-update-site/ https://github.com/takezoe/amateras-modeler modelGoon https://www.cnblogs.com/aademeng/articles/6890266.html......

大头鬼_yc
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部