`
danielhjd
  • 浏览: 246247 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Idiot's Note Six: I/O 保存和读取字节数据,以及BufferedOutputStream的用法

    博客分类:
  • Java
 
阅读更多

InputStream类操作的是字节数据(byte),不是字符(char),在ASC11中字符和字节数据对应为8为数据,java的字符为16位数据,Unicode字符集对应的是16位字节数据,java的整数为32位。

 

一:保存字节级数据

a.DataOutputStream类,向输出流中写个java基本类型,所写的是可以移植的,它们能用DataInputStream类读取。

 

b.FileOutputStream类 可以简单的向文件写入数据。

 

简单代码(保存):

package inAndoutStream;

import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class SimpleOutPutTest {
	public static void main(String[] args) {
		double pi=3.1415;
		int i= 10;
		boolean okay=true;
		char cc='j';
		String s="java C pascle";
		try {
			FileOutputStream fs_out=new FileOutputStream("sample.dat");
			DataOutputStream out=new DataOutputStream(fs_out);
			out.writeDouble(pi);
			out.writeInt(i);
			out.writeBoolean(okay);
			out.writeChar(cc);
			out.writeUTF(s);
			out.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

 

在代码中,FileOutputStream   fos= new FileOutputStream("Sample.dat"); ,是用来创建一个文件来保存数据;

 

Sample.dat <------ fs_out(FileOutputStream)<-------out(DataOutputStream)

 

二:读取字节级数据

a: DataInputStream

 

b: FileInputStream

 

简单代码(读取):

package inAndoutStream;

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class SimpleInputTest {
	public static void main(String[] args) {
		try {
			FileInputStream fis=new FileInputStream("sample.dat");
			DataInputStream dis=new DataInputStream(fis);
			double pi=dis.readDouble();
			int i=dis.readInt();
			boolean b=dis.readBoolean();
			char c=dis.readChar();
			String s=dis.readUTF();
			dis.close();
			System.out.println("pi= "+pi+", i= "+i);
			System.out.println("b= "+b);
			System.out.println("s= "+s);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

 

 

outprint:

写道
pi= 3.1415, i= 10
b= true
s= java C pascle

 

DataInputStream & DataOutputStream的作用一样,其的构造方法需要一个低层次的输入流对象作为参数,FileInputStream可以提供这个流的对象。

Sample.dat ------> fs_out(FileOutputStream)------->out(DataOutputStream)

 

三:BufferedOutputStream

 

bufferedOutputStream类增强了批量数据输出到另一个输出流的能力。当关闭时,如果缓存未满,就强迫将数据压入输出流中,所有关于输出流操作的方法都是自动进行缓存的。

 

以下是简单的代码对比:

   不用缓存:

package inAndoutStream;

import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class WriteUnbufferTest {
	public static void main(String[] args) {
		try {
			long start=System.currentTimeMillis();
			FileOutputStream pos= new FileOutputStream("Daniel.dat");
			DataOutputStream dos=new DataOutputStream(pos);
			for(int i=0;i<100000;i++){
				dos.writeDouble(Math.random());
			}
			dos.close();
			long stop=System.currentTimeMillis();
			System.out.println("Times  ="+(stop-start));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

 

outprintln:

Times  =656

 

 有缓存:

package inAndoutStream;

import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class WriteBufferedTest {
	public static void main(String[] args) {
		try {
			long start=System.currentTimeMillis();
			FileOutputStream pos= new FileOutputStream("Daniel.dat");
			BufferedOutputStream bos=new BufferedOutputStream(pos);
			DataOutputStream dos=new DataOutputStream(bos);
			for(int i=0;i<100000;i++){
				dos.writeDouble(Math.random());
			}
			dos.close();
			long stop=System.currentTimeMillis();
			System.out.println("Times  ="+(stop-start));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

 outpirnt:

Times  =94

 

Sample.dat ------> fos(FileOutputStream)----->bos(BufferedOutputStream) ------->dos(DataOutputStream)

分享到:
评论

相关推荐

    Idiot‘s_Guides_to_Beginning_Programming.pdf.pdf

    从书名《Idiot's Guides to Beginning Programming》以及序言中我们可以了解到,这本书是由Idiot's Guides系列出版的,旨在为初学者提供简单易懂的学习体验。Idiot's Guides系列的特点是将复杂的问题简化,使读者能...

    SQL数据脚本.txt

    博客《MySQL 数据库基础 学习笔记 0606》对应的 SQL 数据脚本,免费自取。传送门:https://blog.csdn.net/idiot5lie/article/details/117793661

    一个操作Excle非常方便的工具包(NPOI)及ExcelHelper.cs类

    NPOI是一个强大的开源库,专门用于处理Microsoft Office文件,包括Excel。在.NET环境中,它提供了与Microsoft...如果你需要进一步了解NPOI的具体使用方法,可以参考NPOI的官方文档或者已有的`ExcelHelper.cs`实现示例。

    jetty-distribution-9.2.22.v20170606.zip

    ~~~~~~~~~~~~~~~~~~ jetty9 windows websocket ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~

    An Idiot's Guide to C++ Templates

    C++ 模板是 C++ 编程语言中一个强大而灵活的功能,它允许程序员编写通用代码来处理多种数据类型。尽管模板提供了诸多便利,但很多程序员往往因为其复杂的语法结构和难以理解的编译错误而对其望而却步。本文旨在通过...

    XML简介+SOAP+XML-RPC

    XML,即可扩展标记语言...综上所述,XML作为数据交换的基础,与SOAP和XML-RPC结合使用,构成了Web服务和分布式系统中重要的通信机制。理解这些技术的基本概念和工作原理对于任何IT专业人士来说都是至关重要的。

    Idiot

    在IT领域,理解和使用不同的字体格式以及图像格式是基本技能。对于开发者来说,知道如何正确嵌入和管理字体,以及在不同平台和设备上保证其兼容性,是非常重要的。此外,了解图像格式的特性,如GIF的动画支持和透明...

    Jnario:Java的可执行规范

    概述 Jnario是用于编写Java可执行规范的框架。 它提供了Xtend的所有优势,同时专门为编写验收和单元测试而量身定制。 当Jnario规范被编译为普通Java Junit测试时,很容易集成。... I want to be told

    superidiot

    它可能还包括详细的安装和使用说明,以及一定的系统配置文件,以确保软件的正常运行和用户体验。在使用时,用户应按照下载说明操作,并妥善保管好加密密钥,以防止数据丢失或被未经授权的人员访问。

    The Complete Idiot's Guide to Writing Shell Extensions.chm

    Explorer扩展编程的指导资料,包括一个chm教程以及其对应的源代码。 Part I - A step-by-step tutorial on writing shell extensions Part II - A tutorial on writing a shell extension that operates on ...

    Windows Shell Idiot's Guide.rar

    详细说明Windows Shell的编程指南,可以处理Windows Explorer资源管理器很多的交互,比如文件复制和剪切,鼠标右键菜单的添加,任意文件的图标的修改和叠加,系统文件拷贝进度条的控制等等,文件属性自定义扩展页和...

    傻瓜指南系列-如何作小生意]The.Complete.Idiot's.Guide.-.Small.Business.pdf

    10. **指数和资源**:书末的索引是快速查找特定信息的工具,此外,作者可能提供了额外的资源,如网站、咨询服务或其他参考资料,以帮助读者进一步学习和解决问题。 这本书不仅提供实用建议,还提醒读者,虽然书中...

    The Complete Idiot's Guide to Improving Your IQ.pdf

    《提高智商的完全傻瓜指南》一书由Richard Pellegrino和Michael Politi撰写,是Macmillan General Reference出版社出版的一部作品,该出版社隶属于Simon & Schuster Macmillan公司。本书旨在为读者提供一系列实用的...

    idiot

    8. **自定义字体**:开发者或设计师有时会创建自己的字体,这涉及字体设计软件的使用,如FontForge,以及字体格式转换和测试。 尽管标题和描述的信息较为简略,但从“idiot”和“字体”的关联中,我们可以探讨到...

    idIOT:物联网ID

    物联网(Internet of Things, IoT)是信息技术领域的一个重要分支,它涵盖了通过互联网连接的各种物理设备、传感器、执行器等,使这些设备能够相互通信、交换数据并执行自动化任务。"idIOT"可能是一个专注于物联网...

    An Idiot’s guide to Support vector machines (SVMs)

    该算法属于学习算法的新一代,在处理线性可分模式和非线性模式方面具有独特的理论优势和高效率的学习方法。下面详细说明文章中提到的关键知识点。 首先,文章提到了SVM的发展背景和主要思想。在1980年代之前,几乎...

    css2_1.rar_idiot

    对于初学者、新手或者对CSS不太熟悉的“idiot”或“dummies”来说,理解并掌握CSS 2.1的基本概念和用法至关重要。 **一、CSS基础** 1. **选择器与声明**:CSS的核心在于选择器和声明。选择器是用来定位HTML元素的...

Global site tag (gtag.js) - Google Analytics