`

黑马程序员-IO包中的其它对象

 
阅读更多

 

------- android培训java培训、期待与您交流! ----------

IO包中的其它对象:

1,随机流-RandomAccessFile(内部封装了字节流)

特点:可以对数据进行读和写的操作。通过构造器的第二个参数模式来区分读写。r/rw。

好处:对于规则的数据可以通过指针的偏移进行随机的数据获取。

方法:seek(),skipBytes(),getFilePointer()。

注意:如果在指定位置写入数据,该位置如果已存在数据,那么会发生局部数据覆盖。


2,管道流-PipedInputStream和PipedOutputStream

特点:读取流和写入流可以进行连接。

连接通过这两个流的构造器,或者通过两个流对象的connect方法。

管道流通常都需要结合多线程进行使用。


 

3,打印流PrintWriter与PrintStream

字节打印流:PrintStream,System.out对应的类型就是PrintStream。

该类构造器可以接收三种类型的参数:

a,File

b,String name

c,OutputStream

前两者在传递参数时,可以指定字符编码。

后者传递参数时,可以指定是否自动刷新。

 

字符打印流:PrintWriter。

该类构造函数可以接收四种类型的参数:

a,File

b,String name

c,OutputStream

d,Writer

前两者在传递参数时,可以指定字符编码。

后两者传递参数时,可以指定是否自动刷新。


该自动刷新动作,只有在被调用println,printf,format方法可以使用。

该打印流较为常用。在日后学习Javaweb中,在进行往客户端应答的时候通过response既可以获取PrintWriter对象,通过将html数据打印到客户端,客户端通过浏览器进行数据解析并展现页面效果。

需求:通过打印流操作字符数据,需要编码,同时也需要提高效率。

PrintWriter out =

new PrintWrite(new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt"),"UTF-8")));

4,序列流-SequenceInputStream

特点:用来将多个读取流合并成一个流,操作多文件数据较为方便。

它的构造器有两个:

一个可以将两个流合并成一个流。

一个可以将枚举Enumeration中的流对象合并一个流。

通常获取Enumeration是通过Vector的elements方法来完成。但是Vector效率较低,所以改用ArrayList。

代码如下:

public void show() {

    ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();

    for(int x=1; x<=3; x++) {

        al.add(new FileInputStream(x+".txt"));

    }

 

    final Iterator<FileInputStream> it = al.iterator();

    Enumeration<FileInputStream> en = new Enumeration() {

            public boolean hasMoreElements() {

                return it.hasNext();

            }

 

            pullic FileInputStream nextElment(){

                return it.next();

            }

   };


    SequenceInputStream sis  = new SequenceInputStream(en);

    FileOutputStream fos = new FileOutputStream("a.txt");

    byte[] buf = new byte[1024];

    int len = 0;

    while((len=sis.read(buf))!=-1) {

        fos.write(buf,0,len);

    }

    os.close();

    sis.close();

}


 

5,操作对象的流-ObjectInputStream与ObjectOutputStream

特点:可以用流直接操作Object,将内存中的对象存储到硬盘上,这个过程称为:对象的本地持久化。

注意:被操作的Object 必须要实现一个标记接口Serializable,该接口中没有方法,该接口用来给类进行UID指定。

可以通过ObjectOutputStream的writeObject方法,来完成对象的持久化。

通过ObjectInputStream的readObject方法,获取存储的对象。

注意:static的变量,非static但被transient关键字所修饰的变量,它们的值不会被持久化。

这两个对象在构造的时候都需要传入一个字节流进行。


 

6,操作基本数据类型的流-DataInputStream与DataOutputStream

专门用于操作基本数据类型。如:writeInt(),readInt()。

writeUTF(),readUTF(),使用的是utf-8修改版。通过writeUTF()写入的数据,必须通过readUTF()获取。


7,操作字节数组的流-ByteArrayInputStream与ByteArrayOutputStream

这两个流中的子类对象,并没有调用底层资源。所以关闭方法close是无效的。

数据源和数据目的都是内存。


操作字节数组中的元素只要通过指针的偏移即可,为什么还要封装这样两个对象呢?

其实是:通过流的读写思想完成了数组操作。

ByteArrayInputStream bis = new ByteArrayInputStream("abc".getBytes());

ByteArrayOutputStream bos = new ByteArrayOutputStream();

int len = 0;

while((len=bis.read())!=-1) {

      bos.write(len);

}


String s = bos.toString();

byte[] arr = bos.toByteArray();

bos.writeTo(new FileOutputStream("a.txt"));

 

操作字符数组CharArrayReader与CharArrayWrite

操作字符串StringReader 与 StringWriter

原理和ByteArrayInputStream ByteArrayOutputStream相同。


---------------------------------------------------------------------------------------------------


字符编码:

ASCII:

ISO8859-1.

GB2312,GBK。

UTF-8.


在流对文本数据操作,为了方便提供了转换流,转换流中就融入了编码表,默认是GBK.

OutputStreamWriter osw = 

new OutputStreamWriter(new FileOutputStream("a.txt"),"UTF-8");

osw.write("你好");

osw.close();


将"你好"字符查了UTF-8的码表,并将码表中对应的数字写入到硬盘上。字节数是6。

InputStreamReader isr = 

new InputStreamReader(new FileInputStream("a.txt"),"gbk");

char[] buf = new char[10];

int len = isr.read(buf);

System.out.println(new String(buf,0,len));// 乱码。

isr.close();

为什么出现乱码呢?读到的数据一共有6个字节,如果是查GBK码表,该码表是一个中文两个字节。

所以读两个字节就查询GBK表,找了一个对应的文件浣,但是并不是和元数据相符。所以称为乱码。


所以要解决该问题。必须将gbk该成UTF-8。

 

------- android培训java培训、期待与您交流! ----------   
详细请查看:http://edu.csdn.net/heima/ 

 

分享到:
评论

相关推荐

    commons-io-2.11.0-API文档-中文版.zip

    赠送jar包:commons-io-2.11.0.jar; 赠送原API文档:commons-io-2.11.0-javadoc.jar; 赠送源代码:commons-io-2.11.0-sources.jar; 赠送Maven依赖信息文件:commons-io-2.11.0.pom; 包含翻译后的API文档:...

    开发工具 commons-io-1.3.2

    开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2...

    黑马程序员_毕向东_Java基础视频教程第18天-14-IO流(拷贝文本文件图例).zip

    黑马程序员_毕向东_Java基础视频教程第18天-14-IO流(拷贝文本文件图例).zip

    t-io百万级网络框架 v3.8.5.zip

    《t-io百万级网络框架 v3.8.5:打造高效稳定的网络通信》 t-io是一个高性能、轻量级的网络通信框架,专为处理高并发、低延迟的网络应用场景而设计。其v3.8.5版本是该框架的一个重要里程碑,提供了更稳定、更高效的...

    java-IO流 commons-io-2.11.0.jar

    java-IO流 commons-io-2.11.0.jar

    commons-io-2.4.jar包 官方免费版

    这个库提供了一系列与输入输出操作相关的实用工具类,极大地简化了Java程序员处理IO任务的复杂性。标题提到的"commons-io-2.4.jar"是这个库的一个版本,版本号为2.4,表明它是官方发布的稳定版本,对先前版本进行了...

    commons-io-2.4 包含了所有commons-io的jar包和源码

    8. **对象序列化**:SerializationUtils类提供了序列化和反序列化对象的方法,便于保存和恢复对象状态。 9. **异常处理**:Commons IO提供了许多特定于I/O操作的异常,如InvalidFileNameException、...

    commons-io-2.0.1大全

    Commons IO是apache的一个开源的工具包,封装了IO操作的相关类,包含了最新的commons-io-2.0.1-bin,commons-io-2.0.1-src,commons-io-2.0.1-doc

    Java-IO流高级-例题 & 例题源码 & PPT教学文档(黑马程序员详细版).rar

    本资料包“Java-IO流高级-例题 & 例题源码 & PPT教学文档(黑马程序员详细版).rar”提供了一个深入学习Java IO流的全面资源,包含实例题目、源代码以及PPT教学材料,适合对Java IO有进阶需求的开发者。 1. **Java ...

    commons-io-1.4.jar.zip_io流jar

    在Java编程语言中,IO(Input/Output)流是一组用于数据传输的类,它们允许程序读取和写入数据,无论是从磁盘、网络还是其他输入输出设备。Java的IO流系统是一个强大的工具,它提供了一种统一的方式来处理不同类型的...

    Java IO commons-io-2.5.jar

    Java IO 还包括Filter流,可以用来装饰其他流,添加额外的功能,如缓冲、转换或加密。 二、commons-io-2.5.jar 功能 Apache Commons IO 提供的增强功能包括: 1. 文件操作:`FileUtils` 类提供了大量静态方法,用于...

    commons-io-2.11.0.rar

    5. 对象输入/输出:提供了序列化和反序列化的工具,如`ObjectInputStream` 和 `ObjectOutputStream` 的替代品,简化了对象的读写。 6. 编码和解码:支持各种数据编码,如Base64和Hex编码。 7. 字符集检测:`...

    commons-io-2.6.jar下载

    Commons IO 是 Apache Software Foundation 开发的一个 Java 库,它的核心组件是 `commons-io-2.6.jar`。这个版本的 JAR 文件包含了丰富的输入/输出流、文件操作、I/O 流工具类以及与文件系统交互的相关功能。下面将...

    黑马程序员_毕向东_Java基础视频教程第18天-09-IO流(文件的续写)

    黑马程序员_毕向东_Java基础视频教程第18天-09-IO流(文件的续写)

    commons-io-2.11.0-bin.zip

    除了FileUtils,Apache Commons IO还包含其他类,如IOUtils,提供流操作的工具方法,例如读取或写入流,以及关闭流的便利方法;LineIterator,用于逐行读取文本文件;DirectoryWalker,可以递归遍历目录树,执行...

    commons-io-1.4.jar

    commons-io-1.4.jar

    commons-io-2.11.0.jar

    commons-io-2.11.0.jar

    commons-io-1.4

    commons-io-1.4里面有很多已经写好的关于io的类,比较便捷

    commons-io-2.6.jar

    《Apache Commons IO 2.6在Java开发中的应用详解》 Apache Commons IO是Apache软件基金会的一个开源项目,它提供了一系列实用的I/O操作工具,极大地简化了Java开发中与输入/输出相关的任务。其中,`commons-io-2.6....

Global site tag (gtag.js) - Google Analytics