一、字符编码

实际的开发过程中的常用编码:

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操作深入相关推荐

  1. Linux C高级编程——文件操作之库函数

    Linux C高级编程--文件操作之库函数 宗旨:技术的学习是有限的,分享的精神是无限的 --为什么要设计标准I/O库? 直接使用API进行文件访问时,需要考虑许多细节问题 例如:read.write ...

  2. Linux C高级编程——文件操作之系统调用

    Linux C高级编程文件操作之系统调用 宗旨:技术的学习是有限的,分享的精神是无限的! 库函数是一些完成特定功能的函数,一般由某个标准组织制作发布,并形成一定的标准.使用库函数编写的函数一般可以应用 ...

  3. Java学习进阶—高级编程

    当你已经熟练的掌握了面向对象中的各种概念后,是否会对这些知识是如何使用的产生浓厚的兴趣?本课程主要针对于已经掌握了JAVA核心开发技术的读者准备,讲解了JAVA多线程.常用类库.IO编程.网络编程.类 ...

  4. Java笔记21-Java高级编程部分-第十三章-IO流

    第13章:IO流 目录: 13.1.File类的使用 FileTest package com.pfl.java3;import org.junit.Test;import java.io.File; ...

  5. 面试准备——Java回顾:高级编程(多线程、常用类、集合、泛型、IO流、反射、动态代理、新特性)

    多线程 程序.进程.线程 程序:完成特定任务.用某种语言编写的一组指令的结合,一段静态的代码,静态对象: 进程:程序的一次执行过程,即正在执行的程序: 线程:进程可细化为线程,是一个程序内部的一条执行 ...

  6. java 8 io_Java IO8:IO简单总结

    字节流.字符流继承关系 前几篇文章讲解了字节流.字符流的使用,不过Java提供给用户的流类远不止此,限于篇幅原因,没办法一一讲解,而且也没有必要一一讲解,就像我在写博客的时候多次提到的,有问题的时候学 ...

  7. 【JavaSE8 高级编程 IO/NIO】IO入门系列①之抽象基类节点流转换流 2019_8_16

    IO输入输出 IO 实现体系概述 [文档级] ①IO基石 四抽象基类 [IS,OS / R,W]抽象基类简述 子类及其实现接口 字节(FIS,OIS)字符(BR,ISR)读 字节(FOS,OOS,PS ...

  8. Java学习day07-Java高级编程-多线程

    Java多线程 IntelliJ IDEA介绍 IDEA和Eclipse的区别 基本概念:程序.进程.线程 线程的创建和使用 2种 第一种创建线程的方式 多线程中常用的方法 线程的调度 第二种线程创建 ...

  9. Java笔记14-Java高级编程部分-第八章-多线程

    1:了解 2:重点 3:首次引入–要清楚,记住 4:重点难点 5:比4小一点 6:补充2的两种,一共四种 8.1.基本概念: 线程的同步来解决安全隐患: 注:JVM简介: 每个线程都有对应相匹配的虚拟 ...

最新文章

  1. PSP 2.0降级至1.5详细教程(转)
  2. day24 面向对象与实例属性
  3. 关于预付卡,您需要知道的事儿
  4. 列表推导式(Python)
  5. Linux 性能监控 : CPU 、Memory 、 IO 、Network
  6. leetcode面试题 02.08. 环路检测
  7. python对文件的写操作方法writetext_用python实现读写文件常见操作方式
  8. 95-170-050-源码-Time-flink的时间及时区问题解决
  9. CSDN markdown编辑器 页面内跳转目录
  10. 马化腾提问_互联网融合创新会带来哪些改变_知乎回答部分总结
  11. ArcGIS水文分析实战教程(13)流域提取流程
  12. 为什么天才容易患阅读障碍症_王俊凯因“耳石症”缺席跨年晚会,这种病与熬夜玩手机有关?...
  13. hcia题库app有哪些?HCNA题库和考试内容一模一样吗?
  14. VMware Workstation Pro 16序列号
  15. 开篇: 高扩展网页制作平台 码良的正确打开方式
  16. Oracle Analyze
  17. (result, consumed) = self._buffer_decode(data, self.errors, final)
  18. 如何运营出一个有吸引力的微信公众号?
  19. 新开业和新签约酒店 | 上海中优城市万豪、杭州明豪voco酒店陆续开业;温德姆集团今年上半年签约59家亚太区新酒店...
  20. ArcGIS Pro玩转NetCDF数据

热门文章

  1. 转 《pywinauto进行win32应用程序的测试》
  2. phpPgAdmin-5.1安装配置
  3. php只保留两位小数
  4. 8.26~8.30-广州软件所-实习工作日记
  5. java io读书笔记(8)FileInputStream/FileOutputStream的应用
  6. [转载] json.dumps()和json.dump()的用法和区别
  7. [转载] JAVA中transient 关键字
  8. VIVADO常见警告、错误及解决方法
  9. Web前端-JavaScript基础教程下
  10. RPC 框架之 Goole protobuf