Java中流的问题总结(实例)

来源:互联网 发布:明星出道前照片 知乎 编辑:程序博客网 时间:2024/05/16 11:46
package mooc;import java.io.IOException;/* * 回车汉子代表两个字节,一个字符 */public class stream {public static void main(String[] args){System.out.println("Hello world");byte[] buffer = new byte[1024];try {int len = System.in.read(buffer);String s = new String(buffer,0,len);System.out.println("读到了多少字节"+len);System.out.println(s);System.out.println("s的长度是"+s.length());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
package mooc;//文件的读和写  现在很少用了import java.util.Scanner;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.DataInputStream;//Data用以读写二进制方式表达的基本数据类型的数据 如int等基本数据类型import java.io.DataOutputStream;import java.io.FileInputStream;//文件输入流//只能处理字节 二进制文件import java.io.FileNotFoundException;import java.io.FileOutputStream;//文件输出流import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;public class filestream {public static void main(String[] args){//System.out.println("Hello world 下面是文件字节流操作");//byte[] buf = new byte[10];//for(int i = 0 ;i<buf.length;i++){//buf[i] = (byte)i;//}//try {///*在当前目录下新建一个文件,如果这个文件有,就//清空原本的内容然后写入心内容,如果没有,就新建一个文件*///FileOutputStream out = new FileOutputStream("a.dat");//try {//out.write(buf);//} catch (IOException e) {//// TODO Auto-generated catch block//e.printStackTrace();//}//try {//out.close();//} catch (IOException e) {//// TODO Auto-generated catch block//e.printStackTrace();//}//} catch (FileNotFoundException e) {//// TODO Auto-generated catch block//e.printStackTrace();//}//System.out.print("下面是流过滤器");//try {//DataOutputStream out = new DataOutputStream(//new BufferedOutputStream(//new FileOutputStream("a.dat")));///*有了DataOutputStream之后我们写的东西就不仅仅是字节了,DataOutputStream//我们要接在一个字节流之上并且中间要有一个缓冲器    也可以说成是一个基于一FileOutput//Stream的BufferedOutputStream*///int i = 0xcafebabe;//out.writeInt(i);//out.close();// DataInputStream in = new DataInputStream(// new BufferedInputStream(// new FileInputStream("a.dat")));//int j = in.readInt();//从in里读一个int////} catch (FileNotFoundException e) {//// TODO Auto-generated catch block//e.printStackTrace();//} catch (IOException e) {//// TODO Auto-generated catch block//e.printStackTrace();//}/////////*在流上建立文本处理  Reader和Writer是用来处理Unicode编码的文件的如果//如果文件本身是用Unicode编码的,则我们可以用Reader和Write直接进行读写,//如果文件本身并不是Unicode,文件本身可能是accisc码,文件本身可能是国标码,//或者就算用的是Unicode,也可能用的是UTF-8这样的编码形式,所以在这种文件本身//并不是Unicode编码时,我们需要借助Stream,我们需要通过Stream去打开那个文件,//然后在Stream的基础上,以过滤流或者说是过滤器的方式去建立Reader和Writer来实现//文本的输入和输出所有我们常见的做法是这样的。*///System.out.print("下面是通过流过滤器来写文本");//try {//PrintWriter out = new PrintWriter(//new BufferedWriter(//Writer缓冲器//new OutputStreamWriter(/*这是一个桥梁,//构建起了Stream和Writer之间的一个桥梁,他的输入时Stream//它的输出就是一个Wirter*///new FileOutputStream("a.txt"))));///*有了DataOutputStream之后我们写的东西就不仅仅是字节了,DataOutputStream//我们要接在一个字节流之上并且中间要有一个缓冲器    也可以说成是一个基于一FileOutput//Stream的BufferedOutputStream*///int i = 123456;//out.println(i);//有了PrintWriter之后我们可以做的事情//out.close();///*Reader 常用的是BufferedReader  readLine()能够将文本按照行// * 整行地读进来// * 还有LineNumberReader 可以得到行号getLineNumer(),在行号中跳转// * Reader中还有一个FileReader,它直接就是InputStreamReader的子类// * 它自己就能在一个二进制的或者说非unicode的文件中建立起一个流,然后最后// * 形成一个reader,对于文件来说,FileReader很好用// *///BufferedReader in = new BufferedReader(//new InputStreamReader(//new FileInputStream("src/mooc/filestream.java")));//String line;//while((line=in.readLine())!=null){////readLine是文件读取返回String,当读到文件末尾的时候会返回null//System.out.println(line);//}//in.readLine();////} catch (FileNotFoundException e) {//// TODO Auto-generated catch block//e.printStackTrace();//} catch (IOException e) {//// TODO Auto-generated catch block//e.printStackTrace();//}///*UTF-8编码,UTF编码是用两个字节来表示一个字符,但是因为在英文的文档中, * 大家都是assic码字符用一个字节就可以表达,UTF-8就是说如果你是英文字符, * 例如字母abcd和数字1234那么,我就用一个字节来表达,如果你是不常见的汉字我可能用三个字节 * 来表达你一个汉字,这样的编码形式就是UTF-8,它即采用了Unicode编码,保证了在任何平台上 * 都能用的可移植性 * 补充:Unicode码也是一种国际标准编码,采用二个字节编码, * 与ASCII码不兼容。目前,在网络、Windows系统和很多大型软件中得到应用。*/System.out.println("下面是关于文本编码若干问题");try {PrintWriter out = new PrintWriter(new BufferedWriter(//Writer缓冲器new OutputStreamWriter(/*这是一个桥梁,构建起了Stream和Writer之间的一个桥梁,他的输入时Stream它的输出就是一个Wirter*/new FileOutputStream("a.txt"))));/*有了DataOutputStream之后我们写的东西就不仅仅是字节了,DataOutputStream我们要接在一个字节流之上并且中间要有一个缓冲器    也可以说成是一个基于一FileOutputStream的BufferedOutputStream*/int i = 123456;out.println(i);//有了PrintWriter之后我们可以做的事情out.close();/*Reader 常用的是BufferedReader  readLine()能够将文本按照行 * 整行地读进来 * 还有LineNumberReader 可以得到行号getLineNumer(),在行号中跳转 * Reader中还有一个FileReader,它直接就是InputStreamReader的子类 * 它自己就能在一个二进制的或者说非unicode的文件中建立起一个流,然后最后 * 形成一个reader,对于文件来说,FileReader很好用 *  */BufferedReader in = new BufferedReader(new InputStreamReader(/*这里的InputstreamReader就是要把你刚才读到的字节形式的转化成文本形式,如果你不给出编码方式,他就用系统默认的编码方式,如文本是GBK,所以我们可以通过加一个编码参数,才解决读取UTF8的问题*/new FileInputStream("utf8.txt"),"utf8"));/*为什么当文件是UTF8时我们就读不出来了呢,是因为Eclipse环境中汉字的编码默认告诉的 * 是GBK国标,但是你实际的文件并不是国标的 */String line;while((line=in.readLine())!=null){//readLine是文件读取返回String,当读到文件末尾的时候会返回nullSystem.out.println(line);}in.readLine();//} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

package mooc;import java.net.InetAddress;import java.net.Socket;import java.net.UnknownHostException;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.io.Serializable;/*对象串行化,读写类 用到了 * ObjectInputStream类   readObject() * ObjectOutputStream类  writeObject() * Serializable接口 */class Student implements Serializable{//可以被串行化的类private String name;private int age;private int grade;public Student(String name,int age,int grade){this.name = name;this.age = age;this.grade = grade;}public String toString(){return name+" "+age+""+grade;}}public class streamzongheyingyong {public static void main(String[] args){Student s1 = new Student("John",18,5);System.out.println(s1);try {ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("obj.dat"));out.writeObject(s1);out.close();ObjectInputStream in = new ObjectInputStream(new FileInputStream("obj.dat"));Student s2 = (Student)in.readObject();System.out.println(s2);System.out.println(s1==s2);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}


0 0
原创粉丝点击