OutputStreamWriter 源码分析
源码 分析 OutputStreamWriter
2023-06-13 09:13:39 时间
大家好,又见面了,我是你们的朋友全栈君。 字符流通向字节流的桥梁:可使用指定的charset将要写入流中的字符编码成字节。
为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器。例如:
Writer out = new BufferedWriter(new OutputStreamWriter(System.out));
public class OutputStreamWriter extends Writer {
// 流解码类,所有操作都交给它完成。
private final StreamEncoder se;
// 创建使用指定字符的OutputStreamWriter。
public OutputStreamWriter(OutputStream out, String charsetName)
throws UnsupportedEncodingException
{
super(out);
if (charsetName == null)
throw new NullPointerException("charsetName");
se = StreamEncoder.forOutputStreamWriter(out, this, charsetName);
}
// 创建使用默认字符的OutputStreamWriter。
public OutputStreamWriter(OutputStream out) {
super(out);
try {
se = StreamEncoder.forOutputStreamWriter(out, this, (String)null);
} catch (UnsupportedEncodingException e) {
throw new Error(e);
}
}
// 创建使用指定字符集的OutputStreamWriter。
public OutputStreamWriter(OutputStream out, Charset cs) {
super(out);
if (cs == null)
throw new NullPointerException("charset");
se = StreamEncoder.forOutputStreamWriter(out, this, cs);
}
// 创建使用指定字符集编码器的OutputStreamWriter。
public OutputStreamWriter(OutputStream out, CharsetEncoder enc) {
super(out);
if (enc == null)
throw new NullPointerException("charset encoder");
se = StreamEncoder.forOutputStreamWriter(out, this, enc);
}
// 返回该流使用的字符编码名。如果流已经关闭,则此方法可能返回 null。
public String getEncoding() {
return se.getEncoding();
}
// 刷新输出缓冲区到底层字节流,而不刷新字节流本身。该方法可以被PrintStream调用。
void flushBuffer() throws IOException {
se.flushBuffer();
}
// 写入单个字符
public void write(int c) throws IOException {
se.write(c);
}
// 写入字符数组的一部分
public void write(char cbuf[], int off, int len) throws IOException {
se.write(cbuf, off, len);
}
// 写入字符串的一部分
public void write(String str, int off, int len) throws IOException {
se.write(str, off, len);
}
// 刷新该流。
public void flush() throws IOException {
se.flush();
}
// 关闭该流。
public void close() throws IOException {
se.close();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/194932.html原文链接:https://javaforall.cn
相关文章
- vue的$nextTick的使用+源码分析
- Postgresql源码(81)plpgsql中如何给占位符赋值(SPI进入执行器取值流程初步分析)
- 在pycharm中如何新建Python文件?_github下载的python源码项目怎么用
- hostapd_acs 源码分析
- 【程序源代码】pdf转word工具及源码
- Redisson 高性能 Redis 分布式锁源码分析
- 深入react源码看setState究竟做了什么?
- Postgresql源码(86)varchar的创建与插入分析
- vue源码分析-响应式系统(二)_2023-02-28
- golang源码分析:grpc 链接池(2)
- react源码解析14.手写hooks2
- React源码分析5-commit6
- client-go 源码分析(9) - workerqueue之限速队列RateLimitingQueue
- sqlmap 源码分析(一)开始、参数解析
- 【Android 系统开发】使用 Source InSight 阅读 Android 源码
- 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | LoadedApk 源码分析 )
- 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 )
- 【Linux 内核】实时调度类 ⑤ ( 实时调度类 rt_sched_class 源码分析 | 结构体字段及函数指针分析 )
- RocketMQ源码分析之刷盘机制
- 在线算命网站源码|算命小程序源码带uniapp
- SkeyeLive开源流媒体同屏直播软件源码功能框架解析
- kafka源码解析之三Broker的启动详解编程语言
- HashTable原理和源码分析详解编程语言
- Redis源码分析:深入剖析运行原理(redis源码分析)
- 用PHP和MySQL打造完美博客——实用源码分享(phpmysql博客源码)
- Linux行数统计:快速统计源码和日志中的行数(linux行数统计)
- 分析Linux木马源码剖析:权限的考验(linux木马源码)
- 分析Redis网络模型对源码的深入分析(redis网络模型源码)