java 深入io_Java高级编程-IO操作深入
一、字符编码
实际的开发过程中的常用编码:
GBK/GB2312:国标编码,可以描述中文信息。
ISO8859-1:国际通用编码,可以用其描述所有的字母信息。
UNICODE编码:采用16进制的方式存储。
UTF编码:象形文字部分采用16进制编码,而普通字符采用ISO8859-1,它的优势在于可以快速传输,节约带宽,也成为了我们开发中首选的编码,主要使用‘UTF-8’编码。
范例:列出本机属性
public class Main {
public static void main(String[] args) {
System.getProperties().list(System.out);
}
}
默认编码为:UTF-8
项目中出现乱码问题 就是编码和解码标准不统一,而最好的解决乱码的方式,就是都使用utf-8,保证编码统一。
二、内存操作流
在之前使用的全部都是文件操作流,文件操作流的特点,程序利用InputStream读取文件内容,而后程序利用OutputStream向文件输出内容,所有的操作都是以文件为终端的。
假设说现在需要实现IO操作,但是不希望产生文件就可以用内存作为终端来处理。
在Java里面提供了两类的额内存操作流:
字节内存操作流:ByteArrayOutputStream、ByteArrayInputStream;
字符内存操作流:CharArrayWriter、CharArrayReader
ByteArrayInputStream继承关系:
CharArrayWriter继承关系:
在ByteArrayOutputStream类里面有一个重要的方法,这个方法可以获取全部保存在内存流中的数据信息,该方法为:
获取数据:public byte[] toByteArray();
使用字符串的形式来获取:public String toString();
范例:内存输入流
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
public class Main {
public static void main(String[] args) throws Exception{
String str = "www.baidu.com";
InputStream inputStream = new ByteArrayInputStream(str.getBytes());
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
int data = 0;
while ((data = inputStream.read()) != -1){
outputStream.write(Character.toUpperCase(data));
}
byte result[] = outputStream.toByteArray();
System.out.println(new String(result));
inputStream.close();
outputStream.close();
}
}
三、管道流
主要功能是实现两个线程之间的IO处理操作。
对于管道流也是分为两类:
字节管道流:PipedOutputStream、PipedInputStream
连接处理:public void connect(PipedOutputStream src) throws IOException
字符管道流:PipedWriter、PipedReader
连接处理:public void connect(PipedReader snk) throws IOException
范例:管道流操作
import java.io.*;
class SendThread implements Runnable{
private PipedOutputStream output;
public SendThread(){
this.output = new PipedOutputStream();
}
public void run(){
for(int i = 0; i< 10 ; i++) {
try {
this.output.write(("【第"+(i+1)+"个消息发送" + Thread.currentThread().getName() + "】\n").getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
try {
this.output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public PipedOutputStream getOutputStreamStream(){
return output;
}
}
class ReceiveThread implements Runnable{
private PipedInputStream input;
public ReceiveThread(){
this.input = new PipedInputStream();
}
public void run(){
byte data[] = new byte[1024];
int len = 0;
ByteArrayOutputStream bos = new ByteArrayOutputStream();//所有的数据保存在内存输出流
try {
while((len = this.input.read(data)) != -1){
bos.write(data,0,len);
}
System.out.println("{"+Thread.currentThread().getName()+"接受消息}\n"+new String(bos.toByteArray()));
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
this.input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public PipedInputStream getInput(){
return input;
}
}
public class Main {
public static void main(String[] args) throws Exception{
SendThread send = new SendThread();
ReceiveThread receive = new ReceiveThread();
send.getOutputStreamStream().connect(receive.getInput());
new Thread(send,"消息发送线程").start();
new Thread(receive,"消息接收线程").start();
}
}
注:初学者,写的不好请见谅,如有相关问题记得私信我
java 深入io_Java高级编程-IO操作深入相关推荐
- Linux C高级编程——文件操作之库函数
Linux C高级编程--文件操作之库函数 宗旨:技术的学习是有限的,分享的精神是无限的 --为什么要设计标准I/O库? 直接使用API进行文件访问时,需要考虑许多细节问题 例如:read.write ...
- Linux C高级编程——文件操作之系统调用
Linux C高级编程文件操作之系统调用 宗旨:技术的学习是有限的,分享的精神是无限的! 库函数是一些完成特定功能的函数,一般由某个标准组织制作发布,并形成一定的标准.使用库函数编写的函数一般可以应用 ...
- Java学习进阶—高级编程
当你已经熟练的掌握了面向对象中的各种概念后,是否会对这些知识是如何使用的产生浓厚的兴趣?本课程主要针对于已经掌握了JAVA核心开发技术的读者准备,讲解了JAVA多线程.常用类库.IO编程.网络编程.类 ...
- Java笔记21-Java高级编程部分-第十三章-IO流
第13章:IO流 目录: 13.1.File类的使用 FileTest package com.pfl.java3;import org.junit.Test;import java.io.File; ...
- 面试准备——Java回顾:高级编程(多线程、常用类、集合、泛型、IO流、反射、动态代理、新特性)
多线程 程序.进程.线程 程序:完成特定任务.用某种语言编写的一组指令的结合,一段静态的代码,静态对象: 进程:程序的一次执行过程,即正在执行的程序: 线程:进程可细化为线程,是一个程序内部的一条执行 ...
- java 8 io_Java IO8:IO简单总结
字节流.字符流继承关系 前几篇文章讲解了字节流.字符流的使用,不过Java提供给用户的流类远不止此,限于篇幅原因,没办法一一讲解,而且也没有必要一一讲解,就像我在写博客的时候多次提到的,有问题的时候学 ...
- 【JavaSE8 高级编程 IO/NIO】IO入门系列①之抽象基类节点流转换流 2019_8_16
IO输入输出 IO 实现体系概述 [文档级] ①IO基石 四抽象基类 [IS,OS / R,W]抽象基类简述 子类及其实现接口 字节(FIS,OIS)字符(BR,ISR)读 字节(FOS,OOS,PS ...
- Java学习day07-Java高级编程-多线程
Java多线程 IntelliJ IDEA介绍 IDEA和Eclipse的区别 基本概念:程序.进程.线程 线程的创建和使用 2种 第一种创建线程的方式 多线程中常用的方法 线程的调度 第二种线程创建 ...
- Java笔记14-Java高级编程部分-第八章-多线程
1:了解 2:重点 3:首次引入–要清楚,记住 4:重点难点 5:比4小一点 6:补充2的两种,一共四种 8.1.基本概念: 线程的同步来解决安全隐患: 注:JVM简介: 每个线程都有对应相匹配的虚拟 ...
最新文章
- PSP 2.0降级至1.5详细教程(转)
- day24 面向对象与实例属性
- 关于预付卡,您需要知道的事儿
- 列表推导式(Python)
- Linux 性能监控 : CPU 、Memory 、 IO 、Network
- leetcode面试题 02.08. 环路检测
- python对文件的写操作方法writetext_用python实现读写文件常见操作方式
- 95-170-050-源码-Time-flink的时间及时区问题解决
- CSDN markdown编辑器 页面内跳转目录
- 马化腾提问_互联网融合创新会带来哪些改变_知乎回答部分总结
- ArcGIS水文分析实战教程(13)流域提取流程
- 为什么天才容易患阅读障碍症_王俊凯因“耳石症”缺席跨年晚会,这种病与熬夜玩手机有关?...
- hcia题库app有哪些?HCNA题库和考试内容一模一样吗?
- VMware Workstation Pro 16序列号
- 开篇: 高扩展网页制作平台 码良的正确打开方式
- Oracle Analyze
- (result, consumed) = self._buffer_decode(data, self.errors, final)
- 如何运营出一个有吸引力的微信公众号?
- 新开业和新签约酒店 | 上海中优城市万豪、杭州明豪voco酒店陆续开业;温德姆集团今年上半年签约59家亚太区新酒店...
- ArcGIS Pro玩转NetCDF数据
热门文章
- 转 《pywinauto进行win32应用程序的测试》
- phpPgAdmin-5.1安装配置
- php只保留两位小数
- 8.26~8.30-广州软件所-实习工作日记
- java io读书笔记(8)FileInputStream/FileOutputStream的应用
- [转载] json.dumps()和json.dump()的用法和区别
- [转载] JAVA中transient 关键字
- VIVADO常见警告、错误及解决方法
- Web前端-JavaScript基础教程下
- RPC 框架之 Goole protobuf