`
哈达f
  • 浏览: 120387 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

io中其他的类

    博客分类:
  • j2se
 
阅读更多
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);
			}

			fos.close();
			sis.close();
		}

		
	5,操作对象ObjectInputStream与ObjectOutputStream
		特点:可以用流直接操作Object.将对象冲对内存存储到了硬盘上,称为:对象的本地持久化。
		注意:被操作的Object 必须要实现一个标记接口Serializable,该接口中没有方法。
			该接口用来给类进行UID指定。
		可以通过ObjectOutputStream的writeObject方法。来完成对象的持久化。
		通过ObjectInputStream的readObject方法,获取存储的对象。
		注意:static的成员,还有非静态但被transient关键字所修饰,
		该属性的对象特有值不会进行持久化存储。
		这两个对象在构造的时候都需要传入一个字节流进行。
	

	6,操作基本数据类型DataInputStream与DataOutputStream
		专门用于操作基本数据类型。如:writeInt(),readInt().
		writeUTF(),,readUTF();
		所使用的utf是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。

 

分享到:
评论

相关推荐

    Java IO 工具类大全

    Java IO(Input/Output)是Java平台中处理输入与输出数据的核心部分,它提供了丰富的类库,使得开发者能够高效地进行文件、网络、内存以及其他I/O流的操作。本篇文章将全面解析Java IO工具类,帮助你理解并掌握其在...

    java IO 类层次图

    本文将通过分析一张清晰明了的Java IO类层次图,详细介绍Java IO体系中的主要类及其关系。 #### 二、Java IO 类层次结构详解 ##### 2.1 字节流类层次结构 Java IO中的字节流类主要分为两大类:`InputStream`和`...

    JavaIO大部分类

    本篇将深入探讨Java IO中的核心类、流的概念、缓冲区技术以及NIO(New IO)框架。 1. **核心IO类** - `InputStream` 和 `OutputStream` 是所有字节流的基类,分别代表输入和输出。它们提供了读写单个字节的基本...

    sun.io.CharToByteConverter支持类

    项目工程中用到jdk1.6相关方法,可以使用,但是升级到jdk1.8以后,编译出现java.lang.NoClassDefFoundError: sun/io/CharToByteConverter错误,后经查询,是jdk1.8版本中已经从sun.io.*中进行去除。网上找来了相关...

    java中的io流详解

    Java 中的 IO 流是指在 Java 语言中对输入输出操作的抽象,主要用于实现程序与外部设备和其他计算机之间的交流,尤其是对磁盘文件的操作。IO 流的概念是在 1984 年由 C 语言第一次引入的,后来被 Java 语言所采用。 ...

    网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

    这里我们将深入探讨同步IO、异步IO、阻塞IO和非阻塞IO的概念,理解它们的工作原理以及在实际应用中的差异。 1. 同步IO与异步IO: - **同步IO**:在同步模式下,应用程序执行I/O操作时会等待操作完成。这意味着程序...

    Java对IO类File的操作

    在Java编程语言中,`java.io.File`类是处理文件和目录的核心类。...在实际项目中,结合`File`类和其他IO流类,开发者可以实现各种复杂的文件操作。对于初学者来说,理解和掌握`File`类的使用是学习Java IO的基础。

    Survivor.IO 源码 类吸血鬼幸存者项目

    在《Survivor.IO》的源码中,我们可能会发现以下关键知识点: 1. **游戏循环(Game Loop)**:游戏的核心循环,负责处理输入、更新游戏状态和渲染画面。 2. **对象状态管理**:角色、敌人和其他游戏对象的状态变化...

    hadoop2.7.6 winutil,NativeIO类

    在这个版本中,本地运行Hadoop时,可能会遇到与`winutils.exe`、`NativeIO`类以及`libwinutils.lib`相关的依赖问题。这些组件在Windows环境下尤其关键,因为Hadoop主要设计在Linux上,但在Windows上运行时需要额外的...

    Java IO commons-io-2.5.jar

    8. 零拷贝:`ByteStreams` 类中的`copy()` 方法利用NIO实现零拷贝,提高文件传输效率。 三、使用示例 例如,要复制一个文件,使用`commons-io`库可以这样编写代码: ```java import org.apache.commons.io....

    java中的io详解.

    除了 File 类,Java IO 包中还有许多其他类,例如: * `InputStream`:抽象类,表示输入流 * `OutputStream`:抽象类,表示输出流 * `Reader`:抽象类,表示字符输入流 * `Writer`:抽象类,表示字符输出流 * `...

    java io包中简单的常用类使用

    在Java编程语言中,`java.io`包是处理输入输出操作的核心部分,它包含了大量用于读写数据的类。...在实际项目中,根据需求,还可以结合其他类如 `FileReader/Writer`、`Scanner` 等进行更复杂的输入输出处理。

    java jdk io包类详解

    该类中的`getChannel`方法用于获取文件通道,只有在被显式调用时才会建立;`close`方法确保资源得到妥善释放,并考虑到了线程安全问题。`FileInputStream`中包含的文件描述符主要用于实现流的共享。 - **`...

    java中的IO流整理

    Java中的IO流是Java平台核心特性之一,它用于在各种数据源之间传输数据,包括文件、设备、网络连接等。IO流分为输入流(Input Stream)和输出流(Output Stream),按照处理的数据类型又可以分为字节流和字符流。本...

    FPGA上电后IO的默认状态

    概述在进行FPGA硬件设计时,引脚分配是非常重要的一个环节,特别是在...从引脚类型上分,可以分为三大类:类是普通的IO,其中又分为程序设计中使用到的IO和程序设计中没有使用的IO(即在ucf或者XDC文件中没有进行约束

    commons-io-1.4.jar.zip_io流jar

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

    java调用io流

    Java调用IO流是进行数据输入输出操作的核心技术之一...在实际项目中,根据需求,可能还需要结合其他IO类,如`FileWriter`、`PrintWriter`等,以及更高级的流处理框架,如NIO(New IO)或NIO.2,来实现更复杂的IO操作。

    java小项目练习IO实现

    例如,我们可以在`Athlete`类中添加属性如姓名、参赛项目、成绩等,同时提供对应的方法来获取和设置这些属性。 4. **集合操作**:在处理大量运动员数据时,集合框架的作用尤为突出。我们可以使用ArrayList来动态...

    Hadoop源码_NativeIO.java

    在Hadoop中,`NativeIO`类的作用至关重要,因为它使得Hadoop能更好地利用操作系统特性,提高性能和效率。例如,对于HDFS中的文件操作,直接使用本地系统调用可能比通过Java API更高效。在Windows环境下,`NativeIO$...

    IO流 javaio java 流

    Java中的IO流是Java核心库的重要组成部分,它用于在不同数据源之间传输数据。Java IO流分为两大类:字符流(Character Stream)和字节流(Byte Stream)。字符流处理单个字符,而字节流处理8位的字节序列。它们又...

Global site tag (gtag.js) - Google Analytics