处理流类型:

1、缓冲流

例1:

import java.io.*;
public class TestBufferStream{
public static void main(String args[]){
try{
FileInputStream fis = new FileInputStream("TestCopyByMyself.java");
BufferedInputStream bis = new BufferedInputStream(fis);
int c = 0 ;
System.out.println((char)bis.read());
System.out.println((char)bis.read());
bis.mark(100);//做标记,没看懂API
for(int i=0; i<=10&&(c=bis.read()) != -1; i++){
System.out.print((char)c+" ");
}
System.out.println();
bis.reset();//回到标记的位置
for(int i=0; i<=10&&(c=bis.read()) != -1; i++){
System.out.print((char)c+" ");
}
bis.close();
}catch(IOException e){
e.printStackTrace();
}
}
}

例2:BufferedWriter BufferedRead 应用非常普遍(记住)

import java.io.*;
public class TestBufferStream{
public static void main(String args[]){
try{
BufferedWriter bw = new BufferedWriter(new FileWriter("TestCopyByMyself.java"));
BufferedReader br = new BufferedReader(new FileReader("TestCopyByMyself.java"));
String s = null ;
for(int i=0; i<=100; i++){
s = String.valueOf(Math.random());//返回字符串表示形式
bw.write(s);
bw.newLine();
}
bw.flush();
while((s=br.readLine())!= null){
System.out.println(s);
}
bw.close();
br.close();
}catch(IOException e){
e.printStackTrace();
}
}
}

2、转换流(重要)

例1:

import java.io.*;
public class TestTransForm{
public static void main(String args[]){
try{
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("TestCopyByMyself.java"));
osw.write("fgatwesdghruklotueo");
System.out.println(osw.getEncoding());
osw.close();
osw = new OutputStreamWriter(new FileOutputStream("TestCopyByMyself.java",true),"ISO8859_1");//true是在原文件基础上追加,否则覆盖原内容
//ISO8859_1是字符编码,默认编码GBK
osw.write("fgatwesdghruklotueo");
System.out.println(osw.getEncoding());
osw.close();
}catch(IOException e){
e.printStackTrace();
}
}
}

例2、典型用法

import java.io.*;
public class Test{
public static void main(String args[]){
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String s = null ;
try{
while((s = br.readLine())!=null){
if(s.equalsIgnoreCase("exit"))
break;
System.out.println(s.toUpperCase());
}
br.close();
}catch(IOException e){
e.printStackTrace();
}
}
}

3、数据流

例1

import java.io.*;
public class TestDataStream{
public static void main(String args[]){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
try{
dos.writeDouble(Math.random());
dos.writeBoolean(true);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
System.out.println(bais.available());//字节数=9
DataInputStream dis = new DataInputStream(bais);
System.out.println(dis.readDouble());
System.out.println(dis.readBoolean());
dos.close();
dis.close();
}catch(IOException e){
e.printStackTrace();
}
}
}

输出:

9
0.5303779743857895
true

练习:自己读写文件,注意文件中显示的并非double+boolean

import java.io.*;
public class Test{
public static void main(String [] args){
String filename = "data.txt";
try{
DataOutputStream dos = new DataOutputStream(new FileOutputStream(filename));
DataInputStream dis = new DataInputStream(new FileInputStream(filename));
dos.writeDouble(6.7);
dos.writeInt(3);
System.out.println(dis.available());
System.out.println(dis.readDouble());
System.out.println(dis.readInt());
dos.close();
dis.close();
}catch(IOException e){
e.printStackTrace();
} }
}

4、Print流

例1:

import java.io.*;
public class TestPrintStream{
public static void main(String args[]){
PrintStream ps = null ;
try{
FileOutputStream fos = new FileOutputStream("log.dat");
ps = new PrintStream(fos);
}catch(IOException e){
e.printStackTrace();
}
if(ps!=null){
System.setOut(ps);//System.out中的out默认是命令行,setOut可以改变out的值,这里out指向ps。
}
int ln = 1;
for(char c=0;c<=6000;c++){
System.out.print(c+" ");
if(ln++>=10){
System.out.println();
ln = 1;
}
}
} }

例2:

import java.io.*;
//输入文件名,读该文件内容
public class TestPrintStream{
public static void main(String args[]){
if(args.length<=0)
return;
String filename = args[0];
if(filename!=null){
list(filename,System.out);
}
}
public static void list(String f, PrintStream fs){
try{
BufferedReader br = new BufferedReader(new FileReader(f));
String s = null;
while((s = br.readLine())!=null){
fs.println(s);
}
br.close();
}catch(IOException e){
fs.println("无法读取文件");
}
}
}

例3:日志

import java.io.*;
import java.util.*;
public class TestPrintStream{
public static void main(String args[]){
String s = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try{
FileWriter fw = new FileWriter("logfile.log",true);
PrintWriter log = new PrintWriter(fw);
while((s = br.readLine())!=null){
if(s.equalsIgnoreCase("exit"))
break;
System.out.println(s.toUpperCase());
log.println("-----");
log.println(s.toUpperCase());
log.flush();
}
log.println("==="+new Date()+"===");
log.flush();
log.close();
}catch(IOException e){
e.printStackTrace();
}
}
}

日志的另一种写法(by myself):

import java.io.*;
import java.util.*;
public class Test{
public static void main(String [] args){
String filename = "log.txt" ;
String line = null ;
try{
InputStreamReader fr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(fr);
FileWriter fw = new FileWriter(filename);
/*
PrintWriter pw = new PrintWriter(fw); while((line = br.readLine()) != null){
if(line.equalsIgnoreCase("exit")){
break;
}
pw.println(line);
}
pw.write("==="+new Date()+"===");
pw.flush();
pw.close();
*/
BufferedWriter bw = new BufferedWriter(fw);
while((line=br.readLine()) != null){
if(line.equalsIgnoreCase("exit")){
break;
}
bw.write(line);
bw.newLine();
}
bw.write("==="+new Date()+"===");
bw.flush();
bw.close();
}catch(IOException e){
e.printStackTrace();
} }
}

5、Object流

直接将Object写入或读出。

必须实现seriallzable接口(序列化),是标记性接口,JDK控制序列化过程。

transient关键字修饰的成员变量在序列化时不考虑,即只写入其他三个,而忽略该成员变量。

externalizable接口(外部化),是seriallzable的子接口。此外还有两个方法,自己控制序列化过程。

例1:

import java.io.*;
public class Test{
public static void main(String [] args){
String filename = "obj.txt";
Obj o = new Obj();
try{
FileOutputStream fos = new FileOutputStream(filename);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(o);
oos.flush();
oos.close();
FileInputStream fis = new FileInputStream(filename);
ObjectInputStream ois = new ObjectInputStream(fis);
Obj obj = (Obj)ois.readObject();
System.out.println(obj.a+" "+obj.b+" "+obj.c);
}catch(IOException e){
e.printStackTrace();
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
} class Obj implements Serializable{
int a = 1 ;
String b = "good" ;
transient int c = 9 ;
}

输出:

1 good 0

总结:

JAVA笔记25-IO流(3)-处理流举例的更多相关文章

  1. JAVA笔记12__字节、字符缓冲流/打印流/对象流/

    /** * !!:以后写流的时候一定要加入缓冲!! * 对文件或其它目标频繁的读写操作,效率低,性能差. * 缓冲流:好处是能更高效地读写信息,原理是将数据先缓冲起来,然后一起写入或读取出来. * * ...

  2. Java笔记(二十六)……IO流上 字节流与字符流

    概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...

  3. Java编程思想学习笔记_5(IO流)

    一.用DataInputStream读取字符 可以使用available方法查看还有多少可供存取的字符.示例如下: public class Test1 { public static void ma ...

  4. Java基础知识强化之IO流笔记65:序列化流 和 反序列化流

    1. 什么是 序列化 和 反序列化 ?     序列化 (Serialization):将对象的状态信息转换为可以存储或传输的形式的过程.比如转化为二进制.xml.json等的过程. 在序列化期间,对 ...

  5. Java学习笔记29(IO字符流,转换流)

    字符流:只能操作文本文件,与字节流的区别是,字节流是按照字节来读取文件,而字符流是按照字符来读取,因此字符流的局限性为文本文件 字符输出流:Write类,使用时通过子类   每一次写入都要刷新 pac ...

  6. Java基础知识_毕向东_Java基础视频教程笔记(19-21 IO流)

    18天-06-IO流 字节流和字符流 字节流两个基类:InputStream,FileInputStream,BufferedInputStream OutputStream,FileOutputSt ...

  7. java学习笔记之IO编程—内存流、管道流、随机流

    1.内存操作流 之前学习的IO操作输入和输出都是从文件中来的,当然,也可以将输入和输出的位置设置在内存上,这就需要用到内存操作流,java提供两类内存操作流 字节内存操作流:ByteArrayOutp ...

  8. java 笔记(4) —— java I/O 流、字节流、字符流

    Java中使用流来处理程序的输入和输出操作,流是一个抽象的概念,封装了程序数据于输入输出设备交换的底层细节.JavaIO中又将流分为字节流和字符流,字节流主要用于处理诸如图像,音频视频等二进制格式数据 ...

  9. 详细讲解JAVA中的IO流

    一.流的概念        流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等.        ...

  10. Java基础:IO流之字节流和字符流

    1. 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. 一个流,必有源端和目的端 ...

随机推荐

  1. Dojo入门:初识Dojo

      Dojo的全称是Dojo Toolkit,始创于2004年,是当前各种蓬勃发展的JS工具包中的佼佼者.Dojo 为富互联网应用程序(RIA) 的开发提供了完整的端到端的解决方案,包括核心的 Jav ...

  2. 连接Xshell

    连xshell之前先进入[root@localhost zxj]# vim /etc/ssh/sshd_config, 将115行删除注释改为UseDNS  no, 保存重启sshd(xshell)的 ...

  3. 【Qt开发】Qt应用程序发布封装

    问题:在使用Qt5.3.2编写程序并release,文件夹中已经添加了必要的dll,但在其他机子上运行程序失败,出现了下面的情况: 解决方法一:在C:\Qt\Qt5.3.2\5.3中进入mingw48 ...

  4. java中string , StringBuffer , StringBuilder 区别

    1.String String变量的值不能改变,如果要改变String变量的值,虚拟机首先会遍历方法区中的字符串常量,如果存在需要的值,则虚拟机直接把此常量值的地址分配给String变量,如果不存在这 ...

  5. CDH的ntp时间同步

    云服务器: ntpq -p ntpdate -u 10.52.255.1  #手动同步 自建NTP服务器: https://www.cnblogs.com/yinzhengjie/p/9480665. ...

  6. SpringBoot_01

    一.初识springboot 个人总结:springboot是一个开发更加便捷的spring的技术框架,通过引入启动器便可以快捷的让spring框架和其他框架进行整合, springboot很容易上手 ...

  7. 01:kubernetes基础

    1.1kubernetes简介   参考博客:https://www.kubernetes.org.cn/k8s 1.kubernetes介绍 1. Kubernetes是容器集群管理系统,是一个开源 ...

  8. JS判断当前页面是在 QQ客户端/微信客户端/iOS浏览器/Android浏览器/PC客户端

    browser.js var browser = { versions: function () { var u = navigator.userAgent, app = navigator.appV ...

  9. Jquery复习(四)之text()、html()、val()

    三个简单实用的用于 DOM 操作的 jQuery 方法: text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容(包括 HTML 标记) val() - 设置或返回 ...

  10. HBASE学习笔记(三)

    一. 1.预切割:在创建表的时候,预先对表进行region切割.切割线就是rowkey $hbase> create '] $hbase>create 'ns2:t3',SPLITS=&g ...