二、处理流
.引用类型,保留数据+类型
序列化:将对象保存到文件或者字节数组中保存起来,叫序列化。输出流:ObjectOutputStream。writeObject().
反序列化:从文件或者字节数组中拿出这个对象叫反序列化,反序列化也是创建对象的一种方式。输入流:ObjectInputStream。readObject().
注意:
.先序列化后饭序列化
.不是所有的对象都可以序列化,必须实现java.io.Serializable接口。
不是所有的属性都需要序列化。不序列化的属性使用transient。
**
* 空接口只是标识,告诉JVM这个对象可以序列化。
*/
public class Employee implements java.io.Serializable {
//不需要序列化
private transient String name;
//需要序列化
private double salary;
public Employee() {
}
public Employee(String name, double salary) {
super();
this.name = name;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
} /**
* 不是所有的對象都可以序列化 java.io.NotSerializableException
* 不是所有的屬性都需要序列化 transient
*/
public class ObjectDemo01 {
public static void main(String[] args) throws ClassNotFoundException {
try {
seri("e:/xp/test/ser.txt");
read("e:/xp/test/ser.txt");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//反序列化
public static void read(String destPath) throws IOException, ClassNotFoundException{
//创建源
File src =new File(destPath);
//选择流,反序列化对象,所以选择ObjectInputStream这个输入流。输入输出流是以程序为中心,写到程序是输入流,从程序写出去是输出流。
ObjectInputStream dis =new ObjectInputStream(
new BufferedInputStream(
new FileInputStream(src)
)
); //操作 读取的顺序与写出一致 必须存在才能读取
//不一致,数据存在问题
Object obj =dis.readObject();//先用Object接收,然后强制转换。
if(obj instanceof Employee){
Employee emp=(Employee)obj;
System.out.println(emp.getName());
System.out.println(emp.getSalary());
} obj =dis.readObject();
int[] arr=(int[])obj;
System.out.println(Arrays.toString(arr));
dis.close();
} //序列化
public static void seri(String destPath) throws IOException{
String s;
Integer a;//String自己实现了序列化接口,所以可以自动序列化,没有实现java.io.Serializable接口的,手动实现这个接口就可以序列化了。
Employee emp =new Employee("bjsxt",);
int[] arr ={,,,};//数组也是对象,所以也可以序列化。数组是实现了java.io.Serializable接口,不能序列化的就要手动实现java.io.Serializable接口。
//创建源对象
File dest =new File(destPath);
// 由于是写入对象,所以选择流 ObjectOutputStream
ObjectOutputStream dos =new ObjectOutputStream(
new BufferedOutputStream(
new FileOutputStream(dest)
)
);
//操作 写出的顺序 为读取准备
dos.writeObject(emp);//向文本中写入对象
dos.writeObject(arr);
//释放资源
dos.close();
}
} 流关闭的方法:
.编写工具类,实现关闭功能。
import java.io.Closeable;
public class FileUtil {
/**
* 工具类关闭流
* 可变参数: ... 只能形参最后一个位置,处理方式与数组一致
* FileUtil.closeAll(os,is);
*/
public static void close(String info, int a , float b,Closeable ... io){//3个点表示可变参数,个数随便,但是类型是Closeable。
for(Closeable temp:io){
try {
if (null != temp) {
temp.close();//凡事实现了Closeable接口的都有close()方法。
}
} catch (Exception e) {
}
}
} /**
* 使用泛型方法
*/
public static <T extends Closeable> void closeAll(T ... io){
for(Closeable temp:io){
try {
if (null != temp) {
temp.close();
}
} catch (Exception e) {
}
}
}
} jdk1.7之后的新特性关闭流:
/**
* 1.7新特性 try --with --resource
* @param srcPath
* @param destPath
* @throws FileNotFoundException
* @throws IOException
*/
public static void copyFile2(String srcPath,String destPath) throws FileNotFoundException,IOException {
//1、建立联系 源(存在且为文件) +目的地(文件可以不存在)
// File src =new File(srcPath);
//File dest =new File(destPath);
//if(! src.isFile()){ //不是文件或者为null
/// System.out.println("只能拷贝文件");
// throw new IOException("只能拷贝文件");
//}
//2、选择流
try(//声明的部分加载try里面
InputStream is =new FileInputStream(src);
OutputStream os =new FileOutputStream(dest);
){
//3、文件拷贝 循环+读取+写出
byte[] flush =new byte[];
int len =;
//读取
while(-!=(len=is.read(flush))){
//写出
os.write(flush, , len);
}
os.flush(); //强制刷出
}catch(e){ } } /**
* PrintStream 打印流(字节流),肯定是一个处理流
*/
public class PrintStreamDemo01 {
public static void main(String[] args) throws FileNotFoundException {
System.out.println("test");
PrintStream ps =System.out;
ps.println(false); //输出到文件
File src = new File("e:/xp/test/print.txt");
ps = new PrintStream(new BufferedOutputStream(new FileOutputStream(src)));//java.io.PrintStream.PrintStream(OutputStream out)
ps.println("io is so easy....啊啊啊啊啊啊啊啊");//这样就写入到文件了。 ps.close();
} } /**
* 三个常量
* 1、System.in 输入流 键盘输入
* 2、System.out 输出流 控制台输出
* System.err,通常用于输出错误。
*
* ==>重定向
* setIn()
* setOut()
* setErr()
* FileDescriptor.in
* FileDescriptor.out
*/
public class SystemDemo01 {
public static void main(String[] args) throws FileNotFoundException {
test1();
test2();
//重定向,System.out.println不再向控制台输出,而是向文件中输出。true表示自动刷新。
System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream("e:/xp/test/print.txt")),true));//e:/xp/test/print.txt不存在可以创建
System.out.println("a嗖嗖嗖"); //控制台 -->文件
System.out.println("test柔柔弱弱");
while(true){System.out.println("back..ss嗖嗖嗖.."+i);i++;}//一直往文件中写
//回控制台
System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream(FileDescriptor.out)),true));//FileDescriptor.out就代表了控制台,控制台也是一个文件。
System.out.println("back..ss嗖嗖嗖..");//
}
public static void test2() throws FileNotFoundException{
InputStream is =System.in; //System.in代表键盘输入
//is = new BufferedInputStream(new FileInputStream("e:/xp/test/print.txt"));//从文件输出到控制台。
Scanner sc = new Scanner(is);//Scanner也是一个处理流。
System.out.println("请输入:");//这是一个阻塞
System.out.println(sc.nextLine());//输出键盘输入的内容
}
public static void test1(){
System.out.println("test");
System.err.println("err");//输出为红色。System.out和System.err是一样的,只是颜色不同,System.err用于输出错误信息,System.out用于输出一般的信息。
}
} /**
* 自己封装一个输入
*/
public class BuffereIn {
public static void main(String[] args) throws IOException {
InputStream is =System.in;//System.in是一个节点流,并且是一个字节流,也是输入流。
BufferedReader br = new BufferedReader(new InputStreamReader(is));
System.out.println("请输入。。。。");
String msg =br.readLine();//这行执行后程序会阻塞等待输入。
System.out.println(msg);
}
}

java14 处理流的更多相关文章

  1. 使用C#处理基于比特流的数据

    使用C#处理基于比特流的数据 0x00 起因 最近需要处理一些基于比特流的数据,计算机处理数据一般都是以byte(8bit)为单位的,使用BinaryReader读取的数据也是如此,即使读取bool型 ...

  2. HTML 事件(三) 事件流与事件委托

    本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...

  3. FILE文件流的中fopen、fread、fseek、fclose的使用

    FILE文件流用于对文件的快速操作,主要的操作函数有fopen.fseek.fread.fclose,在对文件结构比较清楚时使用这几个函数会比较快捷的得到文件中具体位置的数据,提取对我们有用的信息,满 ...

  4. java.IO输入输出流:过滤流:buffer流和data流

    java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...

  5. java 字节流与字符流的区别

    字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作 ...

  6. BZOJ 3504: [Cqoi2014]危桥 [最大流]

    3504: [Cqoi2014]危桥 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1407  Solved: 703[Submit][Status] ...

  7. java I/O流

    输入流(读取数据的流) BufferedInputStream---继承--->FileInputStream--继承--->InputStream------> (1)字节流操作中 ...

  8. Ford-Fulkerson 最大流算法

    流网络(Flow Networks)指的是一个有向图 G = (V, E),其中每条边 (u, v) ∈ E 均有一非负容量 c(u, v) ≥ 0.如果 (u, v) ∉ E 则可以规定 c(u, ...

  9. .NET基础拾遗(3)字符串、集合和流

    Index: (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基础 ...

随机推荐

  1. QT中的字符串处理函数

    Fn 1 : arg 这个函数的具体声明不写了,它有20个重载,典型的示例代码如下: 1: #include <QtCore/QCoreApplication> 2: #include & ...

  2. SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-002-AOP术语解析

    一. 1.Advice Advice是切面的要做的操作,它定义了what.when(什么时候要做什么事) aspects have a purpose—a job they’re meant to d ...

  3. 第五章 HID设备

    5.1 HID介绍 为简化USB设备的开发过程,USB提出了设备类的概念.所有设备类都必须支持标准USB描述符和标准USB设备请求.如果有必要,设备类还可以自行定义其专用的描述符和设备请求,这分别被称 ...

  4. Java按位置解析文本文件(使用Swing选择文件)

    工作中遇到这样的一个需求,按位置解析一些文本文件,它们由头部.详情.尾部组成,并且每一行的长度可能不一样,每一行代表的意思也可能不一样,但是每一行各个位置代表的含义已经确定了. 例如有下面这样一段文本 ...

  5. RxJava开发精要7 – Schedulers-解决Android主线程问题

    原文出自<RxJava Essentials> 原文作者 : Ivan Morgillo 译文出自 : 开发技术前线 www.devtf.cn 转载声明: 本译文已授权开发者头条享有独家转 ...

  6. JNI编程(二) —— 让C++和Java相互调用(2)

    3.getRamdomOrder() 这个方法会从backend得到一个随机的Order对象(抱歉这里“Random”拼错了),然后再调用java中相应的通知方法来通知foreground.getRa ...

  7. windows 下 使用codeblocks 实现C语言对python的扩展

    本人比较懒就粘一下别人的配置方案了 从这开始到代码 摘自http://blog.csdn.net/yueguanghaidao/article/details/11538433 一直对Python扩展 ...

  8. BGP详解

    相信各位站长在托管服务器或者选择虚拟主机的时候,提供商都会说他们的机房是双线机房,保证你的站点访问速度,那么这里所谓的双线机房到底是何意思,它又为何能提升站点的访问速度呢? 一遍小型机房的所谓双线路其 ...

  9. MapReduce架构设计

    MapReduce采用Master/Slave的架构,其架构图如下: 它主要有以下4个部分组成: 1)Client 2)JobTracker JobTracke负责资源监控和作业调度.JobTrack ...

  10. Java 数组在内存中的结构

    Java中的数组存储两类事物: 原始值(int,char,...),或者引用(对象指针). 当一个对象通过 new 创建,那么将在堆内存中分配一段空间,并且返回其引用(指针). 对于数组,也是同样的方 ...