Java I/O编程思路
我们在开发过程中不可避免遇到字符编码问题。遇到乱码问题的时候一定要保持清晰,网上很多关于字符编码集,这里我也就不介绍各种编码,这里我介绍自己编程中遇到字符编码问题时的思路。
乱码问题 无非就是 字节 与 字符 转换时出现问题。
下面一张图显示处理数据的过程:

上面过程中 最复杂的就是 编码 与 解码 两个过程,幸运的是 现在的高级语言都已经帮我们把整个步骤做了。
而 存储 与 读取这两个步骤之中我们最常见的就是 读取 问题,因为存储非常简单,而读取就要考虑到字符编码的问题了。
我们知道在C语言中读取文件最基本的方法是read(int fd, void *buf, sizt_t qty) fd文件描述符 buf 用来存放数据的目的缓冲区 qty:要读取的字节数
我们要考虑的是把文件中的字节读取出来后如何组装这些字节,让他们显示原来的模样,用C语言处理明显很复杂,但是其他语言都是基于C语言的处理过程,我们要明白大致原理。
Java I/O最低层的 InputStream接口(面向字节),其他所有的高层I/O接口都是基于该接口的。所以我们不管是文件处理还是网络编程一般都是先获得要处理对象的InputStream实例,然后现在选择 合适的接口 对InputStream的实例进行封装。而这些接口都帮我们完成了解码过程,所以我们一般在创建这些接口实例的时候只用指定解码方案就可以了, 而且解码方案要和编码方案一致,不然就乱码了。
下面代码读取的是博客园的首页的HTML代码:
//创建一个Resource对象
UrlResource url = new UrlResource("http://www.cnblogs.com");
//获取资源的InputStream
InputStream in = url.getInputStream();
//解码方案
String charsetName = "UTF-8";
//选择合适的IO接口,因为这里我们要读取的是网页,所以选择Scanner接口比较合适
//Scanner:一个可以使用正则表达式来分析基本类型和字符串的简单文本扫描器。
Scanner scanner = new Scanner(in, charsetName);
while (scanner.hasNextLine())
System.out.println(scanner.nextLine());
里面的 URLResource 引用了Spring 里面的 类。
所以在Java IO编程的时候 我们要做的也就两个步骤 1: 选择合适的IO接口 2 选择合适的编码/解码方案
Java I/O编程思路的更多相关文章
- 3.JAVA之GUI编程Frame窗口
创建图形化界面思路: 1.创建frame窗体: 2.对窗体进行基本设置: 比如大小.位置.布局 3.定义组件: 4.将组件通过add方法添加到窗体中: 5.让窗体显示,通过setVisible(tur ...
- 二十三、Java基础--------网络编程
Java中另一个重要技术就是网络编程了,为了更好的学习web方向的知识,有必要对java之网络编程好好学习,本文将围绕网络编程技术进行分析. 常见的网络协议:UDP.TCP UDP 1. 将数据源和目 ...
- JAVA的网络编程
网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...
- 【转】Lua coroutine 不一样的多线程编程思路
Lua coroutine 不一样的多线程编程思路 Sunday, Apr 26th, 2009 by Tim | Tags: coroutine, Lua 上周末开始看<Lua程序设计> ...
- 【转】JAVA之网络编程
转自:火之光 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者 ...
- JAVA的网络编程【转】
JAVA的网络编程[转] Posted on 2009-12-03 18:04 火之光 阅读(93441) 评论(20) 编辑 收藏 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能, ...
- 【Socket】Java Socket基础编程
Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基 ...
- Java面向对象 网络编程 上
Java面向对象 网络编程 上 知识概要: (1)网络模型 (2)网络通讯要素 (3)UDP TCP 概念 (4)Socket (5)UDP TCP 传输 ...
- helloworld讲解cocos2d-x的编程思路与要点
用helloworld讲解cocos2d-x的编程思路与要点 本文以cocos2d-x的helloworld为例,讲解cocos2d-x引擎的特点和要点,2.2为了展示新功能,把包括屏幕自适应在内的新 ...
随机推荐
- maven上传自定义jar到本地仓库
mvn install:install-file -Dfile=D:/baidu/ueditor-1.1.1.jar -DgroupId=com.baidu.ueditor -Dartifact ...
- 英蓓特Mars board的android4.0.3源码编译过程
英蓓特Mars board的android4.0.3源码编译过程 作者:StephenZhu(大桥++) 2013年8月22日 若要转载,请注明出处 一.编译环境搭建及要点: 1. 虚拟机软件virt ...
- 学习 opencv---(10)形态学图像处理(2):开运算,闭运算,形态学梯度,顶帽,黒帽合辑
上篇文章中,我们重点了解了腐蚀和膨胀这两种最基本的形态学操作,而运用这两个基本操作,我们可以实现更高级的形态学变换. 所以,本文的主角是OpenCV中的morphologyEx函数,它利用基本的膨胀和 ...
- 第七讲:HTML5中的canvas两个小球全然弹性碰撞
<html> <head> <title>小球之间的碰撞(全然弹性碰撞)</title> <script src="../js/jsce ...
- CSDN Markdown简明教程5-高速上手
0.文件夹 文件夹 前言 CSDN Markdown特点 CSDN Markdown高速上手 1 使用快捷键 粗体斜体 引用 链接 高亮代码块 图片 标题 列表 切割线 撤销反复 2 使用离线写作 3 ...
- 数据的存储-NSKeyedArchiver和write to file介绍
数据的存储-NSKeyedArchiver和write to file介绍 首先介绍各个文件的作用-->讲解文件位置的查找方法-->介绍数据存储的方式:1.使用归档方式存储数据 2.wri ...
- Badge分析&如何逼死处女座
Badge分析 所谓Badge,原本是iOS上的一个效果,但是被Android抄的多了,也就成了Android的标配.图就不上了,大家都懂的. 应用icon显示角标实际上是在Launcher中实现的, ...
- linux 之 yum 介绍 <转>
原文在这里 http://doophp.sinaapp.com/archives/linux/yum-setting-parameter.html 因为是程序员出身,平时虽然经常接触服务器,偶尔也会 ...
- Android 连接 SQL Server (jtds方式)——下
本文主要补充介绍jtds的查询方法,将以博主的一个实际开发程序进行说明 下图是项目的文件列表与界面效果: 运行效果: 1.三个EditText对应的是单个计划的序号.品种名.数量 2 ...
- surfaceView和Camera配合进行摄像头的预览
首先是Camera类,在5.0上已经被废弃,不推荐使用但还是支持的.最新的是Camera2类,我还没有研究,据说用法完全不一样,反正也是一个坑跳入另外一个坑. 上面是简介和需要的权限,记得加上权限. ...