java的IO学习,字节流与字符流的编码讲解

字节流与字符流

字节流可以处理所有类型的数据(图片、视频等),在java中对应的类都为“stream”结尾

1字节=8位二进制=具体存储空间

字符流仅能处理纯文本的数据,在java中对应的类都是以“reader”或者“writer”结尾

如汉字,符号等

import org.junit.Test; 

public class IOTest {
 /**
  * BufferedInputStream BufferedOutputStream
  * 利用字节缓冲流实现文件的复制
  * @throws IOException
  * */
 @Test
 public void bufferedInputStreamAndbufferedOutputStream() throws IOException{
  //新建字节的输入输出
  InputStream in = new FileInputStream("hellow.txt");
  BufferedInputStream bStream = new BufferedInputStream(in);

  OutputStream out = new FileOutputStream("hellow2.txt");
  BufferedOutputStream bOutputStream = new BufferedOutputStream(out);
  //创建缓冲数组
  byte[] bytes = new byte[100];
  //进行复制
  int len = 0;
  while((len = bStream.read(bytes))!= -1)
  {
   bOutputStream.write(bytes, 0, len);
  }
  //关闭流
  bStream.close();
  bOutputStream.close();
 }
/**
  * bufferdeReader And bufferedWriter
  * 利用缓冲流实现文件的复制
  * @throws IOException
  * **/
 @Test
 public void bufferdeReaderAndbufferedWriter() throws IOException {
  // 新建字符的输入输出
  Reader in = new FileReader("hellow.txt");
  BufferedReader bReader = new BufferedReader(in);

  Writer out = new FileWriter("hellow2.txt");
  BufferedWriter bWriter = new BufferedWriter(out);
  // 进行复制
  String line = null;
  int i = 0;
  while ((line = bReader.readLine()) != null) {
   if (i != 0)
    bWriter.write("\n");
   bWriter.write(line, 0, line.length());
   i++;
  }
  // 关闭流
  bReader.close();
  bWriter.close();
 }

/**
 *reader writer
 * 利用字符输入输出流, 完成 hello.txt 文件的复制.
 * 把该文件复制为 hello2.txt
 */

 @Test
 public void readerAndwriter() throws IOException {
  //新建字符的输入输出
  Reader reader = new FileReader("hellow.txt");
  Writer writer = new FileWriter("hellow2.txt");
  //定义数组,用于读写文件
  char[] cbuf = new char[100];
  //读写文件
  int len;
  while((len = reader.read(cbuf)) != -1)
  {
   writer.write(cbuf, 0, len);
  }
  //关闭流
  reader.close();
  writer.close();
 }

/**
*InputStream OutputStream
* 利用字节输入输出流, 完成 hello.txt 文件的复制.
* 把该文件复制为 hello2.txt
* @throws IOException
*/
@Test
public void testCopyFile() throws IOException{
//1. 创建定位到 hello.txt 的文件的输入流
InputStream in = new FileInputStream("枚举类.avi"); 

//2. 创建定位到 hello2.txt 的文件输出流
OutputStream out = new FileOutputStream("枚举类2.avi"); 

//3. 创建一个 byte 数组, 用于读写文件
byte [] buffer = new byte[1024 * 10];
int len = 0; 

//4. 读写文件:
//in.read(buffer); out.write(buffer, 0, len);
while((len = in.read(buffer)) != -1){
out.write(buffer);
} 

//5. 关闭流资源.
out.close();
in.close();
} 

/**
* 测试字节输出流  OutputStream
* @throws IOException
*/
@Test
public void testOutputStream() throws IOException{
OutputStream out = new FileOutputStream("abcd.txt"); 

String content = "www.atguigu.com\nHello Java!";
out.write(content.getBytes()); 

out.close();
} 

/**
* 测试字符输入流.  Reader
* @throws IOException
*/
@Test
public void testReader() throws IOException{
//利用字符输入流读取 hello.txt 文档的内容, 输出到控制台.
Reader reader = new FileReader("hello.txt"); 

char [] buffer = new char[10];
int len = 0; 

while((len = reader.read(buffer)) != -1){
for(int i = 0; i < len; i++){
System.out.print(buffer[i]);
}
} 

reader.close();
} 

/**
* 测试字节输入流 InputStream
* @throws IOException
*/
@Test
public void testInputStream() throws IOException{
//1. 创建了一个字节输入流.
InputStream in = new FileInputStream("hello.txt"); 

//2. 读取文件的内容
//2.1 第一读取一个字节. 效率很低, 不建议这样读. -1 表示读取到文件的结尾处
//     int result = in.read();
//
//     while(result != -1){
//     System.out.print((char)result);
//     result = in.read();
//     } 

//2.2 一次读取一组: 一组字符.
//返回一次实际读取的字节数, 若为 -1 表示读取到文件的结尾
//     byte [] buffer = new byte[10];
//     int len = 0;
//
//     while((len = in.read(buffer)) != -1){
//     for(int i = 0; i < len; i++){
//     System.out.print((char)buffer[i]);
//     }
//     } 

//2.3 把内容读取到字节数组的部分连续的元素中.
byte [] result = new byte[1024 * 10];
in.read(result, 10, in.available()); 

//3. 关闭流资源
in.close();
} 

/**
* File: 代表物理的意义的文件或目录
* @throws IOException
*/
@Test
public void testFile() throws IOException{
//1. 创建 File 对象
File file = new File("hello.txt"); 

//2. 测试 File 对象的方法.
//2.1 文件名相关的方法
String fileName = file.getName();
System.out.println(fileName); 

//2.2 访问文件的绝对路径
String path = file.getAbsolutePath();
System.out.println(path); 

//2.3 为文件重命名
//file.renameTo(new File("d:\\hello.txt")); 

//3. 文件检测相关的方法
System.out.println(file.exists());
File dir = new File("atguigu");
System.out.println(dir.isFile()); 

//4. 获取文件的常规信息
System.out.println(file.length()); 

//5. 文件操作相关.
File file2 = new File("abcd.txt");
file2.createNewFile();
} 

} 
时间: 2024-11-13 09:32:55

java的IO学习,字节流与字符流的编码讲解的相关文章

java:I/O 字节流和字符流

字节流 InputStream和OutputStream的子类:FileInputStream 和 FileOutputStream 方法: int read(byte[] b,int off,int len); void write(byte[] b,int off,int len); 字符流 Reader和Writer的子类:FileReader 和 FileWriter 方法: int read(char[] b,int off,int len); void write(char[] b,

java IO的字节流和字符流及其区别

1. 字节流和字符流的概念    1.1 字节流继承于InputStream    OutputStream,    1.2 字符流继承于InputStreamReader    OutputStreamWriter.在java.io包中还有许多其他的流,主要是为了提高性能和使用方便. 2. 字节流与字符流的区别    2.1 要把一片二进制数据数据逐一输出到某个设备中,或者从某个设备中逐一读取一片二进制数据,不管输入输出设备是什么,我们要用统一的方式来完成这些操作,用一种抽象的方式进行描述,这

java IO之字节流和字符流-OutputSteam和InputStream

java中的IO流分为字节流和字符流:每种流又分输入流和输出流. 先来说一下输入流和输出流:输入输出是针对程序内存而言,那么输入就是向内存写入数据:输出就是从程序内存写出数据. 字节流使用过字节直接操作数据. 字符流则是通过字节写入到缓存,再通过缓存区操作数据. 字节流的父类为InputStream(输入流)和OutputStream(输出流). IntputStream的直接子类有:AudioInputStream,ByteArrayInputStream,FileInputStream,Fi

Java IO-file(读写查)字节流、字符流

使用字节流操作汉字或特殊的符号语言的时候,容易乱码,建议使用字符流. 先有字节流,后有字符流,字符流是对字节流的补充. 使用记事本打开某个文件,可以看到内容的就是文本文件,否则可以理解二进制. 一般的,操作二进制文件(图片,音频,视频等)必须使用字节流. 一般的,操作文本文件使用字符流. 如果不清楚是哪一类型文件,使用字节流. -----------------------------------------字节流-----------------------------------------

JAVA输入/输出流(字节流、字符流、缓冲流)

JAVA输入/输出流 前期知识准备 1.基本java语法 基本原理: 程序在运行期间,可能需要从外部的存储媒介或其他程序中读入所需要的数据,这就需要使用输入流对象.输入流的指向称作它的源,程序从指向源的输入流中读取源中数据.另一方面,程序在处理数据后,可能需要将处理结果写入到永久的存储媒介中或传给其他应用程序,这就需要使用输出流对象.输出流的指向称作它的目的地,程序通过向输出流中写入数据把数据传送到目的地. (本博文只给出文件字节流,文件字符流,缓冲流实例) 文件字节流: FileInputSt

java中在使用字节流和字符流不关闭流引起的情况分析?

package com.hephec; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; public class OutputStreamTest{ public static void main(String[] args) throws Exception{ OutputStream out=new FileOutputStream(new File("E:"+Fi

java.io 字节流与字符流及简单实例

java io是java中非常基础的知识点,对于通信和不涉及到数据库的项目java io应该是要经常使用.java io分为字节流和字符流,分清字节流和字符流的异同是掌握java io的起点. 字节流,最小单位是字节,通信协议中的X-MODEM和Y-MODEM协议传输单位就是字节流.java io中与字节流相关的主要类有:InputStream,OutputStream,FileInputStream,FileOutputStream.与字符流有关的主要类有:Writer,Reader,File

深入理解JAVA I/O系列三:字符流详解

字符流为何存在 既然字节流提供了能够处理任何类型的输入/输出操作的功能,那为什么还要存在字符流呢?容我慢慢道来,字节流不能直接操作Unicode字符,因为一个字符有两个字节,字节流一次只能操作一个字节.如果JAVA不能直接操作字符,我会感到JAVA对这个世界满满的恶意,所以提供对直接的字符输入/输出的支持是很有必要的,因为我们的口号是:一次编写,到处运行. 字符流的概念 输出字符流:把要写入文件的字符序列(实际是unicode码元序列)转为指定编码方式下的字节序列,然后在写入文件中. 输入字符流

【Java IO流】字节流和字符流详解

字节流和字符流 对于文件必然有读和写的操作,读和写就对应了输入和输出流,流又分成字节和字符流. 1.从对文件的操作来讲,有读和写的操作——也就是输入和输出. 2.从流的流向来讲,有输入和输出之分. 3.从流的内容来讲,有字节和字符之分. 这篇文章先后讲解IO流中的字节流和字符流的输入和输出操作. 一.字节流 1)输入和输出流 首先,字节流要进行读和写,也就是输入和输出,所以它有两个抽象的父类InputStream.OutputStream. InputStream抽象了应用程序读取数据的方式,即