`

java io技术

    博客分类:
  • j2se
 
阅读更多

 

1.  数据源

   data source.提供原始数据的原始媒介。常见的:数据库、文件、其他程序、内存、网络连接、IO设备

2.  流的概念

   数据源就像水箱,流就像水管中流着的水流,程序就是我们最终的用户。流是一个抽象、动态的概念,是一连串连续动态的数据集合。

3.  java实现IO流的体系结构

4. 实现特定操作的流

  1)对文件进行操作的流 FileOutputStream/FileInputStream , FileWriter/FileReader

 

FileInputStream用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用FileReader

available(): 并不是指定文件还有多少数据没有读,不然,如果是100g的大文件,返回得数就溢出了。不过,对于普通文件的话可以看做是剩余的未读数据。

返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数。

FileOutputStream用于写入诸如图像数据之类的原始字节的流。要写入字符流,请考虑使用FileWriter。也就是说,处理文本的话使用字符流。

下面是一个实现文本文件复制功能的例子:

 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileCopyTools {

  /**
   * @param args
   */
  public static void main(String[] args) {
    if(fileCopy(args[0],args[1])){
      System.out.println("文件拷贝成功");
    }else{
      System.out.println("文件拷贝失败");
    }
  }

  public static boolean fileCopy(String srcName, String destName){
    File srcFile, destFile;
//  FileReader reader;
//  FileWriter writer;
     FileInputStream reader;
    FileOutputStream writer;
    boolean flag = false;
    try{
      srcFile = new File(srcName);
      destFile = new File(destName);
//    reader = new FileReader(srcFile);
//    char[] buff = new char[100];
      reader = new FileInputStream(srcFile);
      byte[] buff = new byte[100];
      int len;
      StringBuffer strBuffer = new StringBuffer();
      
      while((len = reader.read(buff)) != -1){
        strBuffer.append(new String(buff,0,len));  
      }
//    writer = new FileWriter(destFile);
//    writer.write(strBuffer.toString());
      writer = new FileOutputStream(destFile);
      writer.write(strBuffer.toString().getBytes());
      flag = true;
      writer.flush();
      reader.close();
      writer.close();
    }catch(FileNotFoundException e){
      System.out.println("文件读取异常:= " + e.getMessage());
    }catch(IOException e){
      System.out.println("读取数据异常:= " + e.getMessage());
    }
    return flag;
  }
}
 

 

  2) 实现对内存虚拟文件功能的流 ByteArrayOutputStream/ByteArrayInputStream, CharArrayWriter/CharArrayReader 

 

ByteArrayInputStream包含一个内部缓冲区,该缓冲区包含从流中读取的字节。内部计数器跟踪read方法要提供的下一个字节。

FileInputStream是把文件当做数据源。ByteArrayInputStream则是把内存中的某个数组当做数据源。这个也就是实现了内存虚拟文件功能

ByteArrayOutputStream
此类实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() toString() 获取数据。 ByteArrayOutputStream将一个输出流指向一个Byte数组,但这个Byte数组是ByteArrayOutputStream内部内置的,不需要我们来定义。

注:不需要关闭流的,但是调用close也没有问题,close不做任何事情。因为ByteArrayOutputStream本身操作的是数组,并没有打开文件描述符之类的,所以不需要关闭。

 

将输入流的内容读入到一个数组中返回:

 

byte[] getBytesFromIS(FileInputStream fis){
		ByteArrayOutputStream baos = null;
		int temp = 0;
		try {
			baos = new ByteArrayOutputStream();;
			
			while((temp=fis.read())!=-1){
				baos.write(temp);
			}
			return baos.toByteArray();  //从而返回一个包含输入流所有内容的数组
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
	}
 

 

 

 

 

  3) 实现线程通信功能的流PipedOutputStream/PipedInputStream , PipedWriter/PipedReader

 

/**
 *  生产者线程
 * @author 
 *
 */
class Producer implements Runnable{
  private PipedOutputStream out = new PipedOutputStream();
  public PipedOutputStream getOut(){
    return out;
  }
  public void run(){
    String data = "hello! consumer!";
    try {
      out.write(data.getBytes());
      out.close();
    } catch (IOException e) {
      System.out.println(e.getMessage());
    }
   
  }
}

/**
 * 消费者线程
 * @author 
 *
 */
class Consumer implements Runnable{
  private PipedInputStream in = new PipedInputStream();
  public PipedInputStream getIn(){
    return in;
  }
  public void run(){
    byte[] buff = new byte[100];
    int len;
    try {
      while((len = in.read(buff))!=-1){
        String data = new String(buff,0,len);
        System.out.println("下列数据来自于生产者线程:= " + data);
      }
      in.close();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}
public class PipedStream {

  /**
   * @param args
   */
  public static void main(String[] args) {
    Producer producer = new Producer();
    Consumer consumer = new Consumer();
    PipedInputStream in = consumer.getIn();
    PipedOutputStream out = producer.getOut();
    try {
      in.connect(out); // 进行线程交互的方法
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    new Thread(producer).start();
    new Thread(consumer).start();
  }
}
 

 

  4) 实现各种类型数据流读写功能的流 DataOutputStream/DataInputStream 

    FileOutputStream fos = null;
    DataOutputStream dos = null;
    FileInputStream fis = null;
    DataInputStream dis = null;
    try {
      fos = new FileOutputStream("data.txt");
      BufferedOutputStream bos = new BufferedOutputStream(fos);
      dos = new DataOutputStream(bos);
      dos.writeInt(899);
      dos.writeDouble(1000.11);
      dos.writeBoolean(false);
      // dos.writeBytes("bytes");
      // dos.writeChars("chars");
      dos.writeUTF("utf");
      dos.close();

      fis = new FileInputStream("data.txt");
      BufferedInputStream bis = new BufferedInputStream(fis);
      dis = new DataInputStream(bis);
      System.out.println(dis.readInt());
      System.out.println(dis.readDouble());
      System.out.println(dis.readBoolean());
      System.out.println(dis.readUTF());

      dis.close();
    } catch (IOException e) {
      System.out.println(e.getMessage());
    }

  
 

  5) 实现缓存功能的流 BufferedOutputStream/BufferedInputStream , BufferedWriter/BufferedReader

  6) 对象类型数据读写功能的流

  7) 实现打印功能的流

  8) 字节与字符转换功能的流 OutputStreamWriter/InputStreamWriter,OutputStreamReader/OutputStreamReader

示例代码如下: //接受用户的输入

		BufferedReader bReader = null;
		try {
			System.out.println("名字:");
			bReader = new BufferedReader(new InputStreamReader(System.in));
			
			System.out.println("用户输入:"+bReader.readLine());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
 

 

  9) 实现压缩功能的流ZipOutputStream/ZipInputStream 

 

 

 

分享到:
评论

相关推荐

    java io技术精髓

    【Java IO技术精髓】是Java开发中不可或缺的一部分,它涵盖了数据输入和输出的各种方式。Java IO的核心在于流(Stream),流分为两类:以字节为导向的流和以Unicode字符为导向的流。 1. **以字节为导向的流**主要...

    JavaIO技术分析.rar_javaIO

    Java I/O API之性能分析 IO API的可伸缩性对Web应用有着极其重要的意义。Java 1.4版以前的API中,阻塞I/O令许多人失望。从J2SE 1.4版本开始,Java终于有了可伸缩的I/O API。本文分析并计算了新旧I/O API在可伸缩性...

    java io读取文件

    在Java编程语言中,`IO`(Input/Output)是...在处理大数据量文件时,理解并灵活运用这些Java IO技术至关重要。通过选择合适的流类型、使用缓冲、合理分块以及考虑异步和并发,可以有效地提高文件读取和处理的性能。

    JAVA IO流技术

    Java IO流技术是Java平台中用于处理输入输出的重要机制,其核心在于数据的传输,从数据源到程序或从程序到目的地。在Java中,流分为两大类:输入流(InputStream、Reader)和输出流(OutputStream、Writer)。输入流...

    javaIO案例

    在这个"javaIO案例"中,我们关注的是如何使用核心的Java IO类,如`InputStream`、`OutputStream`、`FileInputStream`、`FileOutputStream`以及`PipedInputStream`和`PipedOutputStream`等管道流。这些类构成了Java ...

    java IO.chm

    《Java IO.chm》是一个关于Java输入/输出(IO)技术的压缩文件,其中包含了丰富的资料,适合开发者深入理解和学习Java IO系统。这篇详细的总结将围绕Java IO体系结构、核心类、流的概念、缓冲区、转换流、字符集、...

    java IO操作总结

    本文档全面总结了Java IO的各种操作,旨在为开发者提供一个深入理解并熟练掌握Java IO技术的资源。 #### 一、临时文件创建与管理 在Java中,可以轻松地创建和管理临时文件,这主要依赖于`java.io.File`类提供的...

    图书管理系统(java IO操作)

    总的来说,本图书管理系统展示了如何利用Java IO技术在控制台环境下实现数据的存取,通过三层架构设计实现了业务逻辑和数据操作的分离,提高了系统的稳定性和可维护性。这种实践对于学习Java编程以及理解软件架构...

    学生管理系统(JAVA+GUI+IO).zip

    《Java GUI与IO技术在学生管理系统中的应用》 在信息技术领域,开发一款学生管理系统是常见的实践项目,它有助于教育机构高效地管理学生的相关信息。本文将深入探讨如何利用Java的图形用户界面(GUI)和输入/输出...

    教授教学课件java-IO.ppt (精华)

    教授教学课件java-IO.ppt (精华)

    Java IO 使用例

    在“JavaIODemo”这个示例中,可能会包含以上提到的一些或全部Java IO操作的代码实例,通过这些实例,我们可以学习如何在实际项目中应用Java IO API。实践是掌握Java IO的最佳方式,通过对这些示例的分析和运行,...

    java IO操作详解.pdf

    ### Java IO操作详解 ...通过以上介绍,我们详细了解了Java IO操作中的一些基本概念和技术点,包括File类的使用、基本的输入输出流操作以及RandomAccessFile的使用等。这些知识对于进行文件读写操作至关重要。

    java小项目练习IO实现

    在Java编程领域,IO(Input/Output)技术是不可或缺的一部分,尤其在处理数据持久化、文件操作、网络通信等方面发挥着重要作用。在这个“java小项目练习IO实现”中,我们将探讨如何利用Java的IO流来实现本地数据的...

    java IO流精讲 JAVA IO流实例开发

    Java IO流的精讲涵盖了许多概念和技术,包括流的分类、流的方向、缓冲区的使用、字符编码以及一些实用的IO类和方法。在实例开发中,我们将深入理解这些概念并应用到实际项目中。 首先,Java IO流按照数据传输的方向...

    java io 与java nio区别

    随着互联网应用的发展和技术的进步,传统的阻塞式IO已经不能满足高性能服务器的需求。为此,Java 1.4 版本引入了新的I/O处理方式——NIO,即New IO。NIO提供了一种基于通道(Channel)和缓冲区(Buffer)的新模型。 ...

    Java_IO完全总结

    ### Java IO系统全面解析 #### 一、Java IO系统概述 ...无论是文件操作、网络通信还是对象序列化,Java IO系统都能提供合适的方法和技术支持。理解和掌握Java IO系统对于任何Java开发者来说都是非常重要的。

    javaIo处理

    ### Java IO处理详解 #### 一、概述 Java IO(Input/Output)是Java编程语言中用于处理输入输出操作的基础框架。它主要包括流(Streams)和文件系统(File System)的...希望本文能帮助您更好地理解和使用Java IO技术。

    Java IO合集

    Java IO和NIO是Java平台中用于输入/输出操作的核心组件。这两个库为开发者提供了处理数据传输的强大工具,无论是在磁盘、网络还是内存中。本合集包含了两本关于这些主题的专业书籍——"Java IO"和"Java NIO",它们...

    java IO系统与正则表达式

    Java IO系统是Java平台中处理输入输出操作的核心组件,它为开发者提供了丰富的类库,用于读写文件、网络通信以及...学习和掌握这两个核心技术,对于Java开发人员来说至关重要,能大大提高其在实际项目中的工作效率。

Global site tag (gtag.js) - Google Analytics