Java字符流

package cn.ITHong.Response;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ResponseDemo1 extends HttpServlet {

	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
			test4(response);
	}
	/**
	 * 字符流输出中文数据,正常显示,有两个处理,与test3()作用完全一样*/
	public void test5(HttpServletResponse response) throws IOException {
		int i =98;
		//字节流到客户端会出现字符
		//所以传数字,必须改变为字符流。
		response.getOutputStream().write((i+"").getBytes());
	}
	/**
	 * 字符流输出中文数据,正常显示,有两个处理,与test3()作用完全一样*/
	public void test4(HttpServletResponse response) throws IOException {
		String s = "同学们测试";
		response.setContentType("text/html;charset=UTF-8");
		 PrintWriter out = response.getWriter();
		 out.write(s);//UTF-8要求咯
	}
	/**
	 * 字符流输出中文数据,正常显示*/
	public void test3(HttpServletResponse response) throws IOException {
		String s = "同学们";
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		 PrintWriter out = response.getWriter();
		 out.write(s);//UTF-8要求咯
	}
	/**
	 * 字符流输出中文数据,正常显示*/
	public void test2(HttpServletResponse response) throws IOException {
		String s = "**腰带摄像机";
		response.setCharacterEncoding("UTF-8");
		response.setHeader("Content-type", "text/html;charset=UTF-8");
		 PrintWriter out = response.getWriter();
		 out.write(s);//UTF-8要求咯
	}
	/**
	 * 字符流输出中文数据,乱码*/
	public void test1(HttpServletResponse response) throws IOException {
		String s = "**腰带摄像机";
		 PrintWriter out = response.getWriter();
		 out.write(s);//默认查的是ISO-8859-1码表(SUN的servlet规范要求)
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		
	}

}

<think> 我们参考提供的引用资料来回答关于Java字符流的问题。 根据引用[1]和[2]:Java IO流按照操作数据的不同分为字节流和字符流字符流专门用于处理字符数据,它们能够自动处理字符编码问题,简化了字符数据的读写。 字符流的两个核心抽象类:Reader和Writer。 引用[2]指出:在IO包中,字符流的输入输出流分别用java.io.Reader和java.io.Writer表示。 引用[5]提供了关于字符流更详细的内容,包括转换流(如OutputStreamWriter)和编码解码问题。 因此,我们可以将回答分为以下几个部分: 1. 字符流概述 2. 字符流的核心类:Reader和Writer 3. 字符流的使用方法(包括转换流) 4. 编码与解码 5. 缓冲流(BufferedReader/BufferedWriter)提高效率 注意:根据引用[3]和[4],缓冲流是一种包装流,用于提高IO效率。对于字符流,同样有缓冲流。 另外,引用[4]提到了使用try-with-resources自动关闭资源。 下面开始组织回答: </think> ### Java字符流介绍 Java字符流Java I/O体系中专门处理**字符数据**的API,基于Unicode编码设计,适用于文本数据处理。与字节流直接操作字节不同,字符流通过自动处理字符编码和解码,简化了文本读写操作。 #### 一、字符流核心类 1. **输入流** - `Reader`:抽象基类 - 常用子类: - `InputStreamReader`:字节到字符的桥梁(转换流) - `FileReader`:文件字符输入流(`InputStreamReader`子类) - `BufferedReader`:带缓冲的字符输入流 2. **输出流** - `Writer`:抽象基类 - 常用子类: - `OutputStreamWriter`:字符到字节的桥梁(转换流) - `FileWriter`:文件字符输出流(`OutputStreamWriter`子类) - `BufferedWriter`:带缓冲的字符输出流 #### 二、字符流核心方法 ```java // 读取方法(Reader) int read():读取单个字符 → 返回字符的ASCII值(-1表示结束) int read(char[] cbuf):读取字符数组 → 返回实际读取长度 // 写入方法(Writer) void write(int c):写入单个字符 void write(char[] cbuf):写入字符数组 void write(String str):写入字符串 ``` #### 三、关键特性 1. **编码与解码** - 编码(字符→字节):`String.getBytes(charsetName)` - 解码(字节→字符):`new String(bytes, charsetName)` - 示例(引用[5]): ```java byte[] bytes = {97, 98, 99}; String str = new String(bytes, "UTF-8"); // 解码为"abc" ``` 2. **转换流** - `InputStreamReader`/`OutputStreamWriter`解决字节流→字符流转换: ```java // 构造方法(引用[5]) OutputStreamWriter(OutputStream out) // 默认编码 OutputStreamWriter(OutputStream out, String charsetName) // 指定编码 ``` 3. **缓冲流优化** - 包装基础流提升性能(引用[3][4]): ```java // 缓冲读取示例 try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) { String line; while ((line = br.readLine()) != null) System.out.println(line); } // try-with-resources自动关闭 ``` #### 四、字符流使用场景 1. 文本文件读写(`.txt`, `.csv`等) 2. 需处理字符编码的场景(如UTF-8/GBK转换) 3. 需按行读取内容的场景(`BufferedReader.readLine()`) 4. 需高频读写文本时(缓冲流减少I/O操作) > ⚠️ **注意事项** > - 字符流**不能**处理非文本数据(如图片、音频) > - 必须显式关闭流或使用`try-with-resources`(引用[4]) > - 指定编码避免乱码(推荐UTF-8) ### 典型示例 写入文件(引用[4]优化版): ```java try (OutputStreamWriter writer = new OutputStreamWriter( new FileOutputStream("data.txt"), StandardCharsets.UTF_8)) { writer.write("Hello, 字符流!"); // 自动编码为UTF-8字节 } // 自动关闭流并刷新缓冲区 ``` --- ### 相关问题 1. 字符流和字节流的本质区别是什么?各自适用哪些场景? 2. 为什么处理中文文本时推荐使用字符流而非字节流? 3. 如何通过`BufferedReader`实现高效的大文本文件读取? 4. 字符流处理过程中出现乱码的可能原因有哪些?如何解决? [^1][^2][^4][^5]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值