- 浏览: 711621 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
javenwong:
你好,我现在需要给一个Composite做圆角处理,不知道怎么 ...
SWT圆角窗口绘制 -
whao189:
回家了详细看看
Storyboard 解析 -
zhaoyubetter:
确实够麻烦
IOS 开发环境,证书和授权文件是什么? -
datawarehouse:
一直对这两个认为是一样的,现在学习了。
Oracle DB中的Schema -
yulanfeiyang:
顶,mark
下载音频,在IOS设备上播放
在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。C/C++只能提供字节流。Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。Java中其他多种多样变化的流均是由它们派生出来的.
字符流和字节流是根据处理数据的不同来区分的。字节流按照8位传输,字节流是最基本的,所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。
1.字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;
2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
读文本的时候用字符流,例如txt文件。读非文本文件的时候用字节流,例如mp3。理论上任何文件都能够用字节流读取,但当读取的是文本数据时,为了能还原成文本你必须再经过一个转换的工序,相对来说字符流就省了这个麻烦,可以有方法直接读取。
字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节, 操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!
1.字节流:继承于InputStream \ OutputStream。
OutputStream提供的方法:
void write(int b):写入一个字节的数据
void write(byte[] buffer):将数组buffer的数据写入流
void write(byte[] buffer,int offset,int len):从buffer[offset]开始,写入len个字节的数据
void flush():强制将buffer内的数据写入流
void close():关闭流
InputStream提供的方法:
int read():读出一个字节的数据,如果已达文件的末端,返回值为-1
int read(byte[] buffer):读出buffer大小的数据,返回值为实际所读出的字节数
int read(byte[] buffer,int offset,int len)
int available():返回流内可供读取的字节数目
long skip(long n):跳过n个字节的数据,返回值为实际所跳过的数据数
void close():关闭流
2.字符流,继承于InputStreamReader \ OutputStreamWriter。
字符流的类:1),BufferedReader是一种过滤器(filter)(extends FilterReader)。过滤
器用来将流的数据加以处理再输出。构造函数为:
BufferedReader(Reader in):生成一个缓冲的字符输入流,in为一个读取器
BufferedReader(Reader in,int size):生成一个缓冲的字符输入流,并指定缓冲区的大小为size
public class IOStreamDemo {
public void samples() throws IOException { //1. 这是从键盘读入一行数据,返回的是一个字符串
BufferedReader stdin =new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter a line:");
System.out.println(stdin.readLine());
//2. 这是从文件中逐行读入数据
BufferedReader in = new BufferedReader(new FileReader("IOStreamDemo.java"));
String s, s2 = new String();
while((s = in.readLine())!= null)
s2 += s + "\n";
in.close();
//3. 这是从一个字符串中逐个读入字节
StringReader in1 = new StringReader(s2);
int c;
while((c = in1.read()) != -1)
System.out.print((char)c);
//4. 这是将一个字符串写入文件
try {
BufferedReader in2 = new BufferedReader(new StringReader(s2));
PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter("IODemo.out")));
int lineCount = 1;
while((s = in2.readLine()) != null )
out1.println(lineCount++ + ": " + s);
out1.close();
} catch(EOFException e) {
System.err.println("End of stream");
}
} }
对于上面的例子,需要说明的有以下几点:
1. InputStreamReader是InputStream和Reader之间的桥梁,由于System.in是字节流,需要用它来包装之后变为字符流供给BufferedReader使用。
3. PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter("IODemo.out")));
这句话体现了Java输入输出系统的一个特点,为了达到某个目的,需要包装好几层。首先,输出目的地是文件IODemo.out,所以最内层包装的是FileWriter,建立一个输出文件流,接下来,我们希望这个流是缓冲的,所以用BufferedWriter来包装它以达到目的,最后,我们需要格式化输出结果,于是将PrintWriter包在最外层。
Java流有着另一个重要的用途,那就是利用对象流对对象进行序列化。
在一个程序运行的时候,其中的变量数据是保存在内存中的,一旦程序结束这些数据将不会被保存,一种解决的办法是将数据写入文件,而Java中提供了一种机制,它可以将程序中的对象写入文件,之后再从文件中把对象读出来重新建立。这就是所谓的对象序列化。Java中引入它主要是为了RMI(Remote Method Invocation)和Java Bean所用,不过在平时应用中,它也是很有用的一种技术。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yakihappy/archive/2009/03/11/3979811.aspx
发表评论
-
JVM内存管理:深入Java内存区域与OOM
2011-07-12 16:03 912原帖地址:http://icyfenix.iteye.com/ ... -
java面试题~
2010-03-27 14:01 1130一、xml有哪些解析技术 ... -
bat,sh文件执行Java
2009-12-13 21:49 31091.xxx.bat echo using Java %JAV ... -
XML CDATA的作用
2009-11-27 12:40 1565当你用FLASH和xml结合做网站应用程序时,例如你做在我研究 ... -
Transient 关键字用法
2009-11-24 16:49 8021、 java的serialization提供了一个 ... -
serialVersionUID的作用
2009-11-23 12:20 1822serialVersionUID 用来表明类的不同版本间的兼容 ... -
JAVA 注解示例 详解
2009-11-23 12:11 821注解(Annotation) 为我们在代码中天界信息提供了一种 ... -
Log4j使用总结
2009-11-07 11:33 797一、介绍 Log4j是Apache的 ... -
jdom学习:读取xml文件
2009-11-02 12:33 1010<?xml version="1.0" ... -
Java构造函数的调用顺序
2009-09-20 17:19 1647在多级继承的情况下,将从继承树的最上层的父类开始,依次执行各个 ... -
字符串"\"替换问题
2009-08-04 15:44 831String s = "F:\\das\\src\\ ... -
java的volatile是什么意思
2009-08-03 10:01 1484我们知道,在Java中 ... -
数组和容器的排序
2009-06-23 18:11 1002排序方法一: package Stuty_Array; ... -
小常识
2009-06-19 10:48 8201. JVM 中, 线程持有Stack, Stack随线程创建 ... -
回顾Java值传递、引用传递
2009-06-18 15:07 1520public class ParamTest { ... -
计算两个日期之间相差的月数
2009-05-27 00:18 1613/** * 计算两个日期之间相差的月数 ... -
在JAVA中读取文件乱码的解决办法
2009-05-20 13:54 1288public static String encodin = ... -
保存Java程序状态及设置Properties文件
2009-05-18 16:11 1033使用Properties文件来保存.Properties文件的 ... -
JavaBeans的属性
2009-05-04 15:41 913JavaBeans的属性与一般Java程序中所指的属性,或者说 ... -
String 的contains方法
2009-03-10 16:55 1007当且仅当此字符串包含指定的值时,返回 true。
相关推荐
这个结构主要围绕着几个关键的抽象类展开: - **InputStream 和 OutputStream**:这是字节流的基础类,用于处理二进制数据。 - **Reader 和 Writer**:这是字符流的基础类,用于处理文本数据。 这些基础类都是抽象...
JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 17 69、文件读写的基本类 17 70、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 17 71、启动一个线程是用run()还是start()? ...
Java JDK实例宝典是一本深度探讨Java开发工具集(Java Development Kit)的实践性书籍,其光盘源码为读者提供了丰富的示例代码,便于学习和理解。这本书旨在帮助Java开发者深入掌握JDK中的核心概念和技术,提升编程...
JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 73、字节流与字符流的区别 74、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。 75、描述一下JVM加载class...
JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 49 73、字节流与字符流的区别 50 74、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。 51 75、描述一下JVM加载...
JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 49 73、字节流与字符流的区别 50 74、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。 51 75、描述一下JVM加载...
JDK 为每种类型的流提供了一些抽象类以供继承,例如 InputStream 和 OutputStream。 9. Java 中实现运行时多态的条件是什么? Java 中实现运行时多态的条件是:方法的签名相同,但是方法的实现体不同。 例如,一...
JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 49 73、字节流与字符流的区别 50 74、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。 51 75、描述一下JVM加载...
JDK 为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 字节流,字符流。字节流继承于 InputStream/OutputStream,字符流继承于 Reader/Writer。 8. 如果 main 方法被声明为 private 会怎样? ...
JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 54 73、字节流与字符流的区别 54 74、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。 56 75、描述一下JVM加载...
JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 49 73、字节流与字符流的区别 50 74、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。 51 75、描述一下JVM加载...
JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 49 73、字节流与字符流的区别 50 74、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。 51 75、描述一下JVM...
JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 49 73、字节流与字符流的区别 50 74、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。 51 75、描述一下JVM加载...
Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 接口(interface)是抽象类的变体。在接口中,所有...
14. Java 中 IO 流分为几种? Java 的 IO 流分为四类:字节流(Byte Stream),字符流(Character Stream),输入流(InputStream/Reader)和输出流(OutputStream/Writer)。每类又分为节点流(处理特定数据源或...
JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? - **答案**:Java中有两种主要的流类型:字节流和字符流。 - **字节流**:用于处理二进制数据,主要包括`InputStream`和`OutputStream`。 -...
Java支持以下几种数据类型: - **基本类型**:如int、float、char等。 - **引用类型**:如类、数组等。 ##### 3.5 命名规则 - 类名首字母大写。 - 变量名首字母小写。 - 方法名首字母小写,采用驼峰命名法。 ####...
JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?** - 流分为输入流和输出流。 - 输入流的基类是`InputStream`,输出流的基类是`OutputStream`。 **42. java中会存在内存泄漏吗,请简单描述。...