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

java的基本语法(五)

    博客分类:
  • java
阅读更多

自己摘录的,难免有错,请见谅!

            【第八章  流】

1.Java 流式输入/输出原理:
在Java程序中,对于数据的输入/输出操作以"流"(stream)方式进行;
J2SDK提供了各种各样的"流"类,用以获取不同种类的数据;程序中
通过标准的方法输入或输出数据。

输入/输出流的分类:


java.io 包中定义了多个流类型(类或抽象类)来实现输入/输出功能;
可以从不同的角度对其进行分类:

   按数据流的*方向*不同可以分为【输入流】和【输出流】
   按处理数据*单位*不同可以分为【字节流】和【字符流】
   按照*功能*不同可以分为【节点流】和【处理流】


J2 SDK 所提供的所有流类型位于包Java.io内都分别继承自以下四种抽象流类型.
*******************************************
                  字节流          字符流  *
输入流           InputStream      Reader  *
输出流           Output           Writer  *
*******************************************

 
【节点流和处理流】
[节点流]为可以从一个特定的数据源(节点)读写数据(如:文件,内存)
[处理流]是"连接"在已存在的流(节点流或处理流)之上,通过对数据的
        处理为程序提供更为强大的读写功能。


InputStream:继承自InputStream的流都是用于向程序中输入数据,且数据的单位为字节(8 bit)

OutputStream:继承自OutputStream的流是用于程序中输出数据,且数据的单位为字节(8 bit)

Reader:继承自Reader的流都是用于向程序中输入数据,且数据的单位为字符(16 bit)

Writer:继承自Reader的流都是用于向程序中输出数据,且数据的单位为字符(16 bit)

***************************************************************************************************
                                     【节点流的类型:】这根管道直接读到数据源
***************************************************************************************************
类型                     字符流(中文也可以读取)                        字节流
                
File(文件)       FileReader       FileWriter          FileInputStream       FileOutputStream
Memory Array     CharArrayReader  CharArrayWriter     ByteArrayInputStream  ByteArrayOutputStream
Memory String    StringReader     StringWriter                      
Pipe(管道)       PipedReader       PopedWriter        PipedInputStream       PipedOutputStream

例如:
----------------------------------------读取字符流文件-----------------------------------------
import java.io.*;
public class TestFileReader{
 public static void main(String[] args){
  FileReader fr = null;
  int c = 0;
  try{
   fr = new FileReader("D:/lianxi/io/TestFileInputStream.java");
   int ln = 0;
   while ((c=fr.read())!=-1){
    System.out.print((char)c); 
   } 
   fr.close();
  }catch(FileNotFoundException e){
   System.out.println("找不到指定文件"); 
  }catch(IOException e){
   System.out.println("文件读取错误"); 
  }
 } 
}

---------------------------------------复制字节流文件-------------------------------------------------
import java.io.*;
public class TestFileOutputStream{
 public static void main(String[] args){
  int b = 0;
  FileInputStream in = null;
  FileOutputStream out = null;
  try{
   in = new FileInputStream("D:\\lianxi\\Collection\\BasicGeneric.java");
   out = new FileOutputStream("D:\\lianxi\\io\\BG.java");
   while((b=in.read())!= -1){
    out.write(b); 
   }
   in.close();
   out.close();
   }catch (FileNotFoundException e2){
    System.out.println("找不到指定文件");System.exit(-1); 
   }catch (IOException e1){
    System.out.println("文件复制错误");System.exit(-1); 
   }
    System.out.println("文件已复制");
 } 
}
--------------------------------------------读取字节流--------------------------------------------
import java.io.*;
public class TestFileInputStream{
 public static void main(String[] args){
  int b = 0;
  FileInputStream in = null;
  try{
    in = new FileInputStream("D:/lianxi/io/TestFileInputStream.java"); 
  }catch(FileNotFoundException e){
    System.out.println("找不到指定文件");
    System.exit(-1); 
  }
  
  try{
   long num = 0;
   while((b=in.read())!=-1){
     System.out.print((char)b);
     num++; 
   } 
   in.close();
   System.out.println();
   System.out.println("共读取了"+num+"个字节");
  }catch(IOException e1){
   System.out.println("文件读取错误");
   System.exit(-1); 
  }
 } 
}

***************************************************************************************************
                                     【处理流的类型:】这根管道包了另外一个管道
***************************************************************************************************
缓冲流:缓冲流要"套接"在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新方法。


import java.io.*;
public class TestBuffered{
 public static void main(String[] args){
  try{
   BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\lianxi\\io\\dat2.txt"));
   BufferedReader br = new BufferedReader(new FileReader("d:\\lianxi\\io\\dat2.txt"));
   String s = null;
   for(int i=1;i<=100;i++){
    s = String.valueOf(Math.random());
     bw.write(s);
     bw.newLine();
    } 
    bw.flush();
    while((s=br.readLine())!=null){
     System.out.println(s); 
    }
    bw.close();
    br.close();
  } catch(IOException e){
    e.printStackTrace(); 
  }
 } 
}
---------------------------------------------------------------------------------------------------

***************************************************************************************************
                                     【转换流的类型:】
***************************************************************************************************
InputStreamReader和OutputStreamWriter 用与字节数据到字符数据之间的转换。
InputStreamReader 需要和 InputStream  "套接"。
OutputStreamWriter需要和 OutputStream "套接"。

---------------------------------------------------------------------------------------------------
import java.io.*;
public class TestTransForm1{
 public static void main(String[] args){
   try{
     OutputStreamWriter osw = new OutputStreamWriter(
      new FileOutputStream("d:\\lianxi\\io\\char.txt"));
      osw.write("Mirosofttibnmsunappe8");
      System.out.println(osw.getEncoding());
      osw.close();
      osw = new OutputStreamWriter(new FileOutputStream("d:\\lianxi\\io\\char.txt",true),"ISO8859_1");
      osw.write("Mirosofttibnmsunappe0");
      System.out.println(osw.getEncoding());
      osw.close();
   }catch(IOException e){
     e.printStackTrace();
    }
 } 
}
---------------------------------------------------------------------------------------------------
import java.io.*;
public class TestTransForm2{
  public static void main(String[] args){
      InputStreamReader isr = new InputStreamReader(System.in);
      BufferedReader br = new BufferedReader(isr);
      String s = null;
      try{
         s = br.readLine(); 
         while(s!=null){
          if(s.equalsIgnoreCase("exit")) break; 
          System.out.println(s.toUpperCase());
          System.out.println(s.toLowerCase());
          s = br.readLine();
         }
         br.close();
      }catch(IOException e){
        e.printStackTrace(); 
      }
  } 
}

***************************************************************************************************
                                     【数据流的类型:】
***************************************************************************************************
数据流:DataInputStream 和 DataOutputStream 分别继承自InputStream和OutputStream
它属于处理流,需要分别"套接"在InputStream和OutputStream类型的节点流上
---------------------------------------------------------------------------------------------------
import java.io.*;
public class TestDataOutputStream{
 public static void main(String[] args){
   ByteArrayOutputStream baos = new ByteArrayOutputStream();
   DataOutputStream dos = new DataOutputStream(baos);
   try{
     dos.writeDouble(Math.random());
     dos.writeBoolean(true);
     ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
     System.out.println(bais.available());
     DataInputStream dis = new DataInputStream(bais);
     System.out.println(dis.readDouble());
     System.out.println(dis.readBoolean());
     dos.close(); dis.close();
   }catch(IOException e){
    e.printStackTrace(); 
   }
  
  
 } 
}

***************************************************************************************************
                                     【打印Print流的类型:】
***************************************************************************************************
Print 流:PrintWriter 和 PrintStream 都属于输出流,分别针对于字符和字节。提供了重载的print!
Print 流不会抛异常!
---------------------------------------------------------------------------------------------------
import java.io.*;
public class TestPrint{
 public static void main(String[] args){
   PrintStream ps = null;
   try{
     FileOutputStream fos = new FileOutputStream("D:\\lianxi\\io\\log.dat");
     ps = new PrintStream(fos);
    }catch(IOException e){
      e.printStackTrace();
    }
   if(ps != null){
     System.setOut(ps); 
   }
   int ln = 0;
   for(char c = 0; c <= 60000; c++){
     System.out.print(c+"  ");
     if(ln++>=100){
       System.out.println();
       ln = 0; 
     } 
   }  
 } 
}

import java.io.*;
import java.util.*;
public class TestPrintStream{
 public static void main(String[] args){
    String s = null;
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    try{
     FileWriter fw = new FileWriter("D:\\lianxi\\io\\logfile.log",true);
     PrintWriter log = new PrintWriter(fw);
     while((s = br.readLine())!= null){
      if(s.equalsIgnoreCase("exit")) break;
      System.out.println(s.toUpperCase());
      log.println("---------");
      log.println(s.toUpperCase());
      log.flush();       
     }
     log.println("==="+ new Date()+"===");
     log.flush();
     log.close();
    }catch(IOException e){
      e.printStackTrace(); 
    }     
 } 
}

***************************************************************************************************
                                     【Object流的类型:】
***************************************************************************************************
Object流:直接将Object写入或读出。
 
transient 关键字    修饰成员变量,在修饰序列化时不予考虑,打印0
 
Serializable 接口   如果想把某个类的对象序列化,必须实现Serializable 接口
Externalizable 接口

public interface Externalizableextends Serializable


void readExternal(ObjectInput in)
          
void writeExternal(ObjectOutput out)
 
自己控制序列化过程

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

 

 

分享到:
评论

相关推荐

    Java基本语法大全(全).ppt

    Java基本语法大全

    Java的概述与基本语法规则

    二、Java基本语法 1. **变量**:Java中的变量必须先声明后使用,有八种基本数据类型(byte, short, int, long, float, double, char, boolean)和引用数据类型(对象、数组、接口)。 2. **数据类型转换**:Java支持...

    Java基本语法编程练习.doc

    Java 基本语法编程练习 Java 是一种广泛使用的高级编程语言,具有平台独立性、对象oriented 和大规模的标准库等特点。Java 基本语法编程练习是学习 Java 语言的基础,以下是 Java 基本语法编程练习的知识点总结: ...

    Java基本语法.doc

    Java基本语法

    JAVA基本语法及关键字.chm

    JAVA的基本语法及48个关键字! chm文档! 找了好久都找不到,只好自己做一个了! 分享一下...

    java基本语法大全

    java基本语法大全 非常好用,详细地介绍了java语法特点,还有丰富的实例

    Java基本语法.ppt

    Java基本语法.ppt 让读者对数据类型、表达式等Java基本语法内容有一个了解,这些内容是任何一门程序设计语言都必须包含的部分,可为程序设计打基础

    Java基本语法.pdf

    根据给定文件的信息,我们可以深入探讨Java的基本语法和核心概念,包括程序结构、注释、...以上知识点覆盖了Java基本语法的核心要素,包括程序结构、注释、数据类型以及变量和常量的使用,为初学者提供了坚实的基础。

    JAVA语法大全(基本语法)

    JAVA语法大全(基本语法) JAVA语法大全是指JAVA的基本语法,包括关键字、词法规则、数据类型、常量与变量、运算符和表达式、语句、数组和字符串等方面的知识点。 一、词法规则 词法规则是JAVA程序的基本组成部分...

    Java中的基本语法部分思维导图

    JavaSE阶段,基本语法部分的思维导图,学习Java对于新人来说本来就比较难,我在这里自己把基本语法部分的知识点都进行了一个串联,做成了一个思维导图,可供初学者以及备考学生进行参考

    JAVA基础语法总结

    这篇总结将深入探讨Java的基础语法,帮助初学者理解并掌握Java编程的核心概念。 **1. Java程序结构** Java程序由类(Class)组成,每个类都包含方法(Method)。程序执行始于main方法。例如: ```java public class...

    Java的基本语法的笔记

    Java的基本语法的笔记

    实验二:Java语法基础

    本_experiment_总结了 Java 的一些基本的语法知识,包括变量和常量的使用、运算符与表达式的使用、选择、循环、分支语句的使用等。实验内容包括输入一个学生的成绩,给出相应的等级、编写一个程序从键盘输入 5 个...

    java基本语法.ppt

    Java 基本语法 Java 程序设计的基本语法是学习 Java 的基础,这部分内容涵盖了 Java 的变量、常量、运算符、控制语句等基础知识。 一、变量 在 Java 中,变量是存储数据的一个基本单元房间,变量名是房间的名字,...

    java基础语法 汇总

    ### Java基础语法汇总 本文将基于给定的文件信息,对Java的基础语法进行一次全面而深入的解析。Java作为一种广泛使用的编程语言,在软件开发、Web应用、移动应用等多个领域都有着重要的地位。对于初学者而言,掌握...

    01.Java基本语法

    01.Java基本语法

    Java 基本语法

    以下是Java基本语法的一些核心知识点: 1. **数据类型**:Java有两大类数据类型,即基本数据类型和引用数据类型。基本数据类型包括整型(byte, short, int, long)、浮点型(float, double)、字符型(char)和布尔...

    java基本语法ppt 下载

    总的来说,Java基本语法的学习对于初学者来说至关重要,因为它提供了编写Java程序的基础。理解这些概念后,开发者能够创建简单的程序,并逐渐进阶到更复杂的面向对象编程。通过不断的实践和学习,可以掌握Java编程的...

    JAVA基础语法,最基本的语法

    本人属于初学者,通过老师的讲解,做出来的自身对JAVA基本语法的理解

Global site tag (gtag.js) - Google Analytics