您的位置:首页 > 编程语言 > Java开发

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

2016-12-30 15:56 197 查看
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 block
e.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
我们要接在一个字节流之上并且中间要有一个缓冲器    也可以说成是一个基于一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(/*这里的InputstreamReader就是要把你刚才读到的
字节形式的转化成文本形式,如果你不给出编码方式,他就用系统默认的编码
方式,如文本是GBK,所以我们可以通过加一个编码参数,才解决读取UTF8的问题*/
new FileInputStream("utf8.txt"),"utf8"));
/*为什么当文件是UTF8时我们就读不出来了呢,是因为Eclipse环境中汉字的编码默认告诉的
* 是GBK国标,但是你实际的文件并不是国标的 */
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();
}

}
}

package mooc;

import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.io.BufferedWriter;
i
4000
mport 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 block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: