`
liubuzhudeyun
  • 浏览: 12114 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java 中的流 .

    博客分类:
  • java
 
阅读更多
java中有很多种流,可以分为节点流,处理流,也可以分为字节流,字符流

基本的节点流如下:InputStream,OutputStream,FileInputStream,FileOutputStream,Reader,Writer,FileReader,FilerWriter

处理流如下:BufferedInputStream,BufferedOutputStream,OutputStreamReader,OutputStreamWriter,DataOutputStream,DataInputStream,ObjectInputStream,ObjectOutputStream

ByteArrayInputStream,ByteArrayOutputStream等

以上只是列举了一些比较常用的,如果要详细了解,可以查看jdk的API文档

IO又分两种流

字节流 InputStream OutputStream

字符流 Reader Writer

他们都是抽象类

具体实现
字节流 FileInputStream FileOutputStream
字符流 FileReader FileWriter 


  字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点.
     所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列.
      字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。



字节流转换成字符流可以用 InputSteamReader OutputStreamWriter

转换成BufferdReader BufferedWriter 他们具有缓冲区


下面是关于上面流写的一些例子,用作参考

public class FileInputStreamTest {

 /**
  * @param args
  */
 public static void main(String[] args)throws Exception {
  // TODO Auto-generated method stub
//  fileInputStream();
//  fileWrite();
//  bufferWriter();
//  ouputStreamWriter();
//  dataInputStream();
  objectOutputStream();

 }


 private static void objectOutputStream() throws IOException,
   FileNotFoundException {
  ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("c:/data.dat"));
  SerializableClazz clazz = new SerializableClazz(10,"test",1.023);
  oos.writeObject(clazz);
  oos.flush();
  oos.close();
 }


 private static void dataInputStream() throws FileNotFoundException,
   IOException, UnsupportedEncodingException {
  DataOutputStream dos = new DataOutputStream(new FileOutputStream("c:/test.txt"));
  dos.writeFloat(new Float(0.123456));
  dos.writeBoolean(true);
  dos.writeChars("这是一个测试");
  dos.flush();
  dos.close();
  
  DataInputStream dis = new DataInputStream(new FileInputStream("c:/test.txt"));
  System.out.println(dis.readFloat());
  System.out.println(dis.readBoolean());
  dis.close();
 }


 private static void ouputStreamWriter() throws FileNotFoundException,
   IOException {
  OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("c:/test.txt",true),"gbk");
  System.out.println(osw.getEncoding());
  osw.write("这是一个测试用例,用来测试 outputstreamwriter" +
    "アリババは、仕入れたい商材の调达、问屋を探せる卸サイトです");
  osw.flush();
  osw.close();
 }

 private static void bufferWriter() throws IOException {
  //字符流,处理流
  BufferedWriter bw = new BufferedWriter(new FileWriter("c:/test.txt"));
  for(int i =0 ; i<100; i++)
  {
//   bw.write(String.valueOf(Math.random()));
   bw.write(String.valueOf(new Random().nextInt(10)));
   bw.newLine();
  }
  bw.close();
 }

 private static void fileWrite() throws IOException {
  //字符流,节点流
  FileWriter fw = new FileWriter("c:/test.txt");
  for(int i= 0 ; i< 5000; i++)
  {
   fw.write("baike.baidu.com/view/1882862.htm");
  }
  fw.flush();
  fw.close();
 }

 private static void fileInputStream() throws FileNotFoundException,
   IOException, UnsupportedEncodingException {
  //字节流,节点流
  FileInputStream fi = new FileInputStream("c:/a.txt");
  StringBuilder str = new StringBuilder();
  byte[] buffer = new byte[1024];
  int b = 0;
  while((b = fi.read(buffer)) != -1)
  {
   str.append(new String(buffer , "gb2312"));
  }
  fi.close();
  System.out.println(str.toString());
 }
}

 

/*

此处定义了一个类,并继承了serializable接口,主要的作用是使对象可序列化,

使用objectouputstream保存到本地或进行网络传输

*/

class SerializableClazz implements Serializable{
 private int i;
 private String str;
 transient private double d;// 序列化时不予考虑
 public SerializableClazz(){}
 public SerializableClazz(int i,String str , double d){
  this.i = i;
  this.str = str;
  this.d = d;
 }
 public SerializableClazz getInstance(){
  return new SerializableClazz();
 }
}


分享到:
评论

相关推荐

    用java.util.zip包现数据压缩与解压

    本文将通过一系列的示例来详细介绍如何利用 Java 中的 `java.util.zip` 包进行数据的压缩与解压操作。此外,还将探讨这一技术在网络传输中的应用。 #### 数据压缩算法简介 在深入讨论具体实现之前,我们先简要了解...

    java.io.Reader 和 java.io.InputStream 的区别

    `java.io.Reader`和`java.io.InputStream`是Java标准库中处理输入数据的核心类,它们分别针对字符流和字节流提供了基础的支持。 #### `java.io.Reader`:字符流的读取器 `java.io.Reader`是所有字符输入流的超类。...

    Java中的`java.util.stream.Collectors.toMap()`方法有什么作用

    在Java中,java.util.stream.Collectors.toMap()方法是一个非常实用的工具,它允许我们将流(Stream)中的元素收集到一个Map中。这个方法是Collectors类中的一个静态方法,它实现了Collector接口,用于在流的终止...

    Java IO流.xmind

    Java IO流思维导图,主要摘录整理的是java.io.*包下的所有IO对象,其中对应备注里包含各个IO对象的构造方法

    Java IO流.pptx

    Java IO流.pptx

    JAVA实验 流.doc

    JAVA实验 流.doc

    java流.....

    Java流是Java编程语言中处理数据输入和输出的重要机制,它允许程序在内存与外部设备之间,以及程序的不同部分之间高效地传输数据。Java流分为字节流和字符流两大类,字节流处理单个字节的数据,而字符流处理Unicode...

    javaIO流.pdf

    javaIO流.pdf

    Java中文件IO流.pdf

    Java 中文件 IO 流 Java 中文件 IO 流是指 Java 语言中对文件的输入输出操作,通过定义文件流来实现文件的读写操作。文件流是指在程序中用于文件输入输出的对象, Java 中提供了多种文件流类型,包括 InputStream ...

    java 课件资料第01节:JAVA IO流.zip

    Java IO流是Java编程语言中处理输入输出操作的重要部分,它是数据传输的通道,允许程序在内存、硬盘、网络等不同设备间交换信息。在Java中,IO流分为字符流和字节流两大类,每类又分别有输入流和输出流四种类型,...

    Prentice.Hall.Core.Java.Volume.2.Advanced.Features.8th.Edition.

    3. **I/O流**:详述了Java的输入/输出系统,包括字节流、字符流、缓冲流、对象序列化以及NIO(New I/O)框架。 4. **反射**:解释了如何在运行时检查和操作类、接口、方法和字段,这对于动态编程和元编程非常有用。...

    java IO流总结.md

    java I/O流的总结 1.操作数据单位:字节流、字符流 对于文本文件(.txt,.java,.c,.cpp),使用字符流处理 对于非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt,...),使用字节流处理 2.数据的流向:输入流、输出流 ...

    Java IO流.docx

    Java IO流技术是Java平台中用于处理输入输出的重要机制,主要涵盖了流(Stream)、输入/输出IO和文件(File)的相关概念。这篇文章将详细介绍这些主题,帮助开发者理解和掌握Java中的文件操作。 1. **流(Stream)** 流...

    java流.rarjava流.rar

    Java流是Java编程语言中处理数据输入和输出的重要机制,它允许程序在内存与外部设备之间,以及程序的不同部分之间高效地传输数据。Java流分为字节流和字符流两大类,字节流处理单个8位字节的数据,而字符流处理...

    Java语言程序设计 第章 Java数据流.ppt

    Java语言程序设计 第章 Java数据流.ppt

    Java IO流.ppt

    这是一份关于android开发的相关资料,供初学者学习使用。

    mysql连接包mysql-connector-java-5.1.27.jar

    `mysql-connector-java-5.1.27.jar`是这个驱动的一个特定版本,它允许Java开发者在他们的应用中无缝地访问和操作MySQL数据库。 MySQL连接器(JDBC驱动)是Java Database Connectivity (JDBC)的一部分,JDBC是Java ...

    云计算工作流调度算法可视化Java实现源码.zip

    云计算工作流调度算法可视化Java实现源码.zip云计算工作流调度算法可视化Java实现源码.zip云计算工作流调度算法可视化Java实现源码.zip云计算工作流调度算法可视化Java实现源码.zip云计算工作流调度算法可视化Java...

    java.io.Serializable序列化问题

    在 Java 编程语言中,序列化是一种将对象的状态(即成员变量的值)转换为可以存储或传输的形式的过程。通常,这种形式是字节流,但也可以是其他格式,如 XML 或 JSON 等。序列化的主要用途包括: - **对象持久化**...

Global site tag (gtag.js) - Google Analytics