Java 进阶P-11+P-12
文本流
在流上建立文本处理
PrintWriter pw = new PrintWriter()(
new BufferedWriter(
new Out put StreamWriter(
new File OutputStream("avc.txt")
)
)
);
Reader
常用的是Buffered Reader
read Line();
Line Number Reader
可以得到行号
getLine Number();
File Reader
- Input Stream Reader类的子类,所有方法都从父类中继承而来
- FileReader(File file)
- 在给定从中读取数据的文件名的情况下创建一个新的file Reader
- File Reader(String fileName)
- 在给定从中读取数据的文件名的情况下创建一个新File Reader
- file Reader不能指定编码转换方式
汉字编码
Java中文编码小结
1. 只有 字符到字节 或者字节到字符 的转换才存在编码转码;
2. Java String 采用 UTF-16 编码方式存储所有字符。unicode体系采用唯一的码点表示唯一的字符信息, 码点的存储方式有UFT-16、UTF-8 等等。: AStringrepresents a string in the UTF-16 format in whichsupplementary charactersare represented bysurrogate pairs(see the sectionUnicode Character Representationsin theCharacterclass for more information). Index values refer tocharcode units, so a supplementary character uses two positions in aString. TheStringclass provides methods for dealing with Unicode code points (i.e., characters), in addition to those for dealing with Unicode code units (i.e.,charvalues).
3. String只有一种格式,可认为String是独立于编码系统的,通过getBytes(String charsetName) 可实现编码转换。
4. String对象是内存数据,string之间不存在编码变换问题。
5. 编码转换场景主要在 I/O , I/O 包括磁盘 I/O 和网络 I/O:文件输入输出、屏幕、数据库、浏览器、服务器。
6. 在内存中倒腾String数据是编码无关的,比如压缩编码。
7. 编码误区: new String(str.getBytes("ISO-8859-1"), "GB18030") 这种用法是无意义的,甚至是错误的。这种用法是用GB18030编码将ISO-8859-1编码格式的字节数据强制转换成unicode码点,不乱码是运气!
9. 数据库JDBC能够处理 数据库数据 <=> String 的正确互换。
9.OutputStreamWriter 和 InputStreamWriter 应该指定编码格式,避免程序依赖操作系统默认编码。
10. 用户从浏览器端发起一个 HTTP 请求,需要存在编码的地方是 URL、Cookie、Parameter。服务器端接受到 HTTP 请求后要解析 HTTP 协议,其中 URI、Cookie 和 POST 表单参数需要解码,服务器端可能还需要读取数据库中的数据,本地或网络中其它地方的文本文件,这些数据都可能存在编码问题,当 Servlet 处理完所有请求的数据后,需要将这些数据再编码通过 Socket 发送到用户请求的浏览器里,再经过浏览器解码成为文本。
11. tomcat: URL 的 URI 部分进行解码的字符集是在 connector 的
12. QueryString(GET 查询参数) 的解码字符集要么是 Header 中 ContentType 中定义的 Charset 要么就是默认的 ISO-8859-1,要使用 ContentType 中定义的编码就要设置 connector 的 中的 useBodyEncodingForURI 设置为 true。
13. 不要在 Header 中传递非 ASCII 字符,如果一定要传递的话,我们可以先将这些字符用 org.apache.catalina.util.URLEncoder 编码然后再添加到 Header 中,这样在浏览器到服务器的传递过程中就不会丢失信息了,如果我们要访问这些项时再按照相应的字符集解码就好了。
14. POST 表单的编解码: 通过 HTTP 的 BODY 传递到服务端的。当我们在页面上点击 submit 按钮时浏览器首先将根据 ContentType 的 Charset 编码格式对表单填的参数进行编码然后提交到服务器端,在服务器端同样也是用 ContentType 中字符集进行解码。所以通过 POST 表单提交的参数一般不会出现问题,而且这个字符集编码是我们自己设置的,可以通过 request.setCharacterEncoding(charset) 来设置。
15.HTTP BODY 的编解码:当用户请求的资源已经成功获取后,这些内容将通过 Response 返回给客户端浏览器,这个过程先要经过编码再到浏览器进行解码。这个过程的编解码字符集可以通过 response.setCharacterEncoding 来设置,它将会覆盖 request.getCharacterEncoding 的值,并且通过 Header 的 Content-Type 返回客户端,浏览器接受到返回的 socket 流时将通过 Content-Type 的 charset 来解码,如果返回的 HTTP Header 中 Content-Type 没有设置 charset,那么浏览器将根据 Html 的 中的 charset 来解码。如果也没有定义的话,那么浏览器将使用默认的编码来解码。。该设置和response.setCharacterEncoding("GBK")等效。
/***@authorzhenjing * * @date 2013-9-7*/ public classcnCodeTest {public static void toHex(char[] b) {for (int i = 0; i < b.length; i++) { System.out.printf("%x " , (int)b[i]); } System.out.println(); }public static void toHex(byte[] b) {for (int i = 0; i < b.length; i++) { System.out.printf("%x ", b[i]); } System.out.println(); }public static voidencode() { String name= "I am 中文编码"; toHex(name.toCharArray());try{byte[] iso8859 = name.getBytes("ISO-8859-1"); toHex(iso8859);byte[] gb2312 = name.getBytes("GB2312"); toHex(gb2312);byte[] gbk = name.getBytes("GBK"); toHex(gbk);byte[] utf16 = name.getBytes("UTF-16"); toHex(utf16);byte[] utf8 = name.getBytes("UTF-8"); toHex(utf8); }catch(Exception e) { e.printStackTrace(); } }public static voidmain(String[] args) { String cn= "中文编码"; //这里存在编码转换: 将文件存储字节转成unicode存入String对象内存. 采用文件编码 char[] charArray =cn.toCharArray();byte[] data =cn.getBytes(); System.out.println("print char array : " +cn); toHex(cn.toCharArray()); cn= "���ı���"; //这里存在编码转换: 将文件存储字节转成unicode存入String对象内存. 采用文件编码。//显示乱码是由于文件采用的编码无法解码文件存储字节数据。故存到String的unicode也是乱码的 charArray =cn.toCharArray(); System.out.println("print char array: " +cn); toHex(cn.toCharArray()); encode(); } }
Java 进阶P-11+P-12的更多相关文章
- Java进阶知识11 Hibernate多对多单向关联(Annotation+XML实现)
1.Annotation 注解版 1.1.应用场景(Student-Teacher):当学生知道有哪些老师教,但是老师不知道自己教哪些学生时,可用单向关联 1.2.创建Teacher类和Student ...
- JDBC中 mysql数据库的连接工具类 Java登录 及增删改查 整理 附带:Navicat Premium 11.0.12中文破解版.zip(下载)mysql数据库工具
先写一个工具类,有实现MySQL数据库连接的方法,和关闭数据库连接.关闭ResultSet 结果集.关闭PreparedStatement 的方法.代码如下: package com.swift; ...
- 从ConcurrentHashMap的演进看Java多线程核心技术 Java进阶(六)
本文分析了HashMap的实现原理,以及resize可能引起死循环和Fast-fail等线程不安全行为.同时结合源码从数据结构,寻址方式,同步方式,计算size等角度分析了JDK 1.7和JDK 1. ...
- Java进阶(三十四)Integer与int的种种比较你知道多少?
Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值 ...
- Java进阶(三十二) HttpClient使用详解
Java进阶(三十二) HttpClient使用详解 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们 ...
- Java进阶之路
Java进阶之路——从初级程序员到架构师,从小工到专家. 怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序 ...
- 转:java 进阶之路
转: https://www.zhihu.com/question/39139518 一.基础篇1.1 JVM1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 http:// ...
- Java进阶学习:将文件上传到七牛云中
Java进阶学习:将文件上传到七牛云中 通过本文,我们将讲述如何利用七牛云官方SDK,将我们的本地文件传输到其存储空间中去. JavaSDK:https://developer.qiniu.com/k ...
- Java进阶教程:使用Lombok提升开发效率
Java进阶教程:使用Lombok提升开发效率 Lombok Lombok是一种Java™实用工具,可用来帮助开发人员消除Java的冗长代码,尤其是对于简单的Java对象(POJO).它通过注释实现这 ...
- java进阶视频分享
更多资源和教程请关注公众号:非科班的科班. 如果觉得我写的还可以请给个赞,谢谢大家,你的鼓励是我创作的动力 课程目录介绍 01.开班仪式02.并发编程专题之多线程基础03.并发编程专题之Java内存模 ...
随机推荐
- 2022-11-13 Acwing每日一题
本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我会认真改正的.同时也希望 ...
- python学习——查找计算机中的文件
# import os # # path = 'C:/Users/admin/Desktop/images' # files = os.listdir(path) # # for f in files ...
- 2022春每日一题:Day 10
题目:CF1110E Magic Stones 每次操作 c[i]变成c[i-1]+c[i+1]-c[i],那么显然,c[1]和c[n]是不会改变的,因此只要c[1]和t[1],c[n]和t[n]不相 ...
- HTTPS - 揭秘 TLS 1.2 协议完整握手过程--此文为转发文,一定要结合wirshark工具看,很清楚
winshark 筛选条件为:tls and ip.src==xxx 本文通过对一次 TLS 握手过程的数据抓包分析做为切入点,希望能进一步的帮助大家理解 HTTPS 原理. HTTPS 是建立在 S ...
- KafkaOffsetMonitor:监控消费者和延迟的队列
个人名片: 因为云计算成为了监控工程师 个人博客:念舒_C.ying CSDN主页️:念舒_C.ying 目录 消费者组列表 消费组的topic列表 图中参数含义解释如下: topic的历史位置 O ...
- HDLBits答案——Verification: Reading Simulations
1 Finding bugs in code 1.1 Bugs mux2 module top_module ( input sel, input [7:0] a, input [7:0] b, ou ...
- SSH(三)创建包和第一个页面
在ssh web项目src下一次创建 com.ssh/ .action .dao .entity .service 四个包,example: 在entity包下创建class,name: produc ...
- 探讨Morest在RESTful API测试的行业实践
摘要:在本文中,我们将重点探讨使用自动化智能化Morest测试技术在RESTful API测试的行业实践. 本文分享自华为云社区<[智能化测试专题]华为云API智能测试工具--Morest测试框 ...
- day16 异常处理生成器
day16 异常处理生成器 今日内容概要 异常处理 异常处理实战应用 生成器对象 生成器对象实现range方法 生成器表达式 今日内容详细 一.异常处理 1.异常常见类型 SyntaxError语法错 ...
- 4.5:HDFS操作实验
〇.概述 1.拓扑结构 2.目标 进行HDFS的实验,了解HDFS的基本操作. 一.常用操作 1.启动 50070 2.查看及创建 3.上传文件