java 对象流有啥用 java对象流传输
转载
Day18个人总结
一、对象流
作用: 1、让对象在不同网络上进行传递 2、将对象存入文件,需要讲对象序列化,所谓的序列化就是将对象转化为字节的过程 对象流:就是将对象序列化以后的字节存储到本地 具体实现过程分为以下几步: 1、创建要存储的类(类中属性加上transient修饰符值将不会被写入文件) 2、使创建的类实现序列化接口 这里需要注意的是类在实现序列化接口(implements Serializable)会有告警,是因为有给这个类发布版本信息发布版本信息如下: 3、使用这个类创建对象并且赋值 4、创建对象流 5、将对写入文件 对象流的读写: 对象流的特点是需要先写后读取,多个对象流的读取时按照存储顺序来读取的,并且不能跳过任何一个对象。 对象流写入和读取代码如下:(关键代码) ObjectOutputStream oos1 = null;
//创建person对象
Person person1 = new Person("kobe",18);
Person person2 = new Person("TD",19);
ObjectInputStream ois1 = null;
try {
fos1 = new FileOutputStream(new File("a.txt"));
//创建对象以及要写入的文件
oos1 = new ObjectOutputStream(fos1);
//将对象序列化写入到文件中
oos1.writeObject(person1);
oos1.writeObject(person2);
//创建要读取文件的对象
ois1 = new ObjectInputStream(new FileInputStream(new File("a.txt")));
//这个类本身就是person类型 所以可以向下转型
Person object1 = (Person)ois1.readObject();
System.out.println(object1);
Person object2 = (Person)ois1.readObject();
System.out.println(object2);
}
|
二、转换流
作用以及使用目的: 转换流是将字节流和字符流相互转换的一个过程,将字节流转换为字符流是为了提高执行效率,反之是为了增加字符流的使用范围。 转化流使用如下:(关键代码) try {
utf-8格式 打印输出到控制台
isr1 = new InputStreamReader(new FileInputStream(new File("b.txt")),"utf-8");
osw1 = new OutputStreamWriter(new FileOutputStream(new File("c.txt")), "gbk");
char[] chars = newchar[10];
int num
while((num = isr1.read(chars)) != -1){
utf-8之后打印到控制台
//System.out.println(chars);
//以GBk的格式写入到c.txt
osw1.write(chars, 0, num);
}
}
|
三、标准输入输出以及重定向错误流
作用: 标准输入流(System)是为了读取控制台用户输入内容,标准输出流可以将内容从控制台输出,输出流又叫打印流(PrintWriter),可以打印将内容打印到文件,或者将内容打印到控制台,具体可以通过构造方法实现控制如下: 具体使用如下:(关键代码): try {
// 可以将内容写入到 文件中
PrintWriter writer = new PrintWriter(new File("a.txt"));
writer.write("哈哈哈哈哈");
writer.println("heheheh");
writer.append("xixixi");
writer.flush();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 可以将内容写到控制台上
PrintWriter writer2 = new PrintWriter(System.out);
writer2.write("哈哈哈哈哈");
writer2.println("heheheh");
writer2.append("xixixi");
writer2.flush();
}
重定向错误流: 重定向错误流重定方向标准输入输出流到文件,可以定向到任意文件 使用如下:(关键代码) FileInputStream fis;
try {
fis = new FileInputStream("a.txt");
System.setIn(fis);// 重新定向 标准输入流
// 重定向需要放在 标准输入流之前
InputStream is = System.in;
byte[] b = newbyte[80];
int count = is.read(b);
System.out.println(new String(b,0,count));
// 标准输出流的重定向
PrintStream ps = new PrintStream("d.txt");
System.setOut(ps);// 标准输出流的重定向
PrintStream ps2 = System.out;
ps2.print("阴天下雨了");
ps2.flush();
// 标准错误流的重定向
System.setErr(ps);
PrintStream ps3 = System.err;
ps3.print("过了会天晴了");
ps3.flush();
}
|
四、内存流
内存流作用: 运行在内存中的流执行效率高,跟其他流不同的是,内存流是以内存为参照物,写入内存使用:ByteArrayOutputStream对象,读取文件使用ByteArrayInputStream对象使用如下: 使用如下:(关键代码) ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
// 向内存中写入内容
baos.write("呵呵呵呵".getBytes());
baos.flush();
// toByteArray() 将流中的内容 转成byte数组
byte[] b= baos.toByteArray();
// 创建 内存输入流
ByteArrayInputStream bais = new ByteArrayInputStream(b);
byte[] b2 = newbyte[50];
int count = bais.read(b2);
System.out.println(new String(b2,0,count));
}
各个方法: ByteArrayOutputStream
注:writeTo( OutputStream out) 方法内置自动刷新功能写入读取文件更加方便使用如下: FileInputStream fis = null;
ByteArrayOutputStream baos = null;
try {
fis = new FileInputStream(new File("a.txt"));
baos = new ByteArrayOutputStream();
byte[] bs = newbyte[10];
int count = 0;
while((count= fis.read(bs))!=-1){
// 写到内存
baos.write(bs, 0, count);
baos.flush();
}
// 将内存中数据写到本地文件中
// writeTo 等同于 上个类中自己写的 writeFile
baos.writeTo(new FileOutputStream(new File("w.txt")));
}
ByteArrayInputStream
|
五、装饰着模式
概念:在原有基础上增加新的功能而不改变原有的方法,增加功能,提高效率,比如子类继承父类的方法,重写父类方法时不改变父类的方法,在原有方法上则增加一些功能。
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。