Java 日看一类(9)之IO包中的CharConversionException类和Console类

java.io.CharConversionException: isHexDigit处理 java.io.CharConversionException: isHexDigit.最近项目运行出现了这个问题,刚开始就知道是编码问题,怎么改编码都不正确,在网上搜到的文章。 立即下载

CharConversionException类是异常类,继承自IO包中的IOException



其作用注释如下:

/**
 * Base class for character conversion exceptions.
 *
 * @author      Asmus Freytag
 * @since       JDK1.1
 */

大意为:

该类为字符转换异常的基础类


仅含有一个成员变量:

该异常类的穿行序列号:

private static final long serialVersionUID = -8680016352018427031L;

仅含有两个构造函数:

不提供字符的构造函数:

public CharConversionException() {}

提供字符的构造函数:

public CharConversionException(String s) {
    super(s);
}

该异常类作用非常明显,就是提示字符转换异常



Console类完成了Flushable的接口,同时引入了如下文件:

import java.util.*;
import java.nio.charset.Charset;
import sun.nio.cs.StreamDecoder;
import sun.nio.cs.StreamEncoder;




其作用注释如下:

/**
 * Methods to access the character-based console device, if any, associated
 * with the current Java virtual machine.
 *
 * <p> Whether a virtual machine has a console is dependent upon the
 * underlying platform and also upon the manner in which the virtual
 * machine is invoked.  If the virtual machine is started from an
 * interactive command line without redirecting the standard input and
 * output streams then its console will exist and will typically be
 * connected to the keyboard and display from which the virtual machine
 * was launched.  If the virtual machine is started automatically, for
 * example by a background job scheduler, then it will typically not
 * have a console.
 * <p>
 * If this virtual machine has a console then it is represented by a
 * unique instance of this class which can be obtained by invoking the
 * {@link java.lang.System#console()} method.  If no console device is
 * available then an invocation of that method will return <tt>null</tt>.
 * <p>
 * Read and write operations are synchronized to guarantee the atomic
 * completion of critical operations; therefore invoking methods
 * {@link #readLine()}, {@link #readPassword()}, {@link #format format()},
 * {@link #printf printf()} as well as the read, format and write operations
 * on the objects returned by {@link #reader()} and {@link #writer()} may
 * block in multithreaded scenarios.
 * <p>
 * Invoking <tt>close()</tt> on the objects returned by the {@link #reader()}
 * and the {@link #writer()} will not close the underlying stream of those
 * objects.
 * <p>
 * The console-read methods return <tt>null</tt> when the end of the
 * console input stream is reached, for example by typing control-D on
 * Unix or control-Z on Windows.  Subsequent read operations will succeed
 * if additional characters are later entered on the console's input
 * device.
 * <p>
 * Unless otherwise specified, passing a <tt>null</tt> argument to any method
 * in this class will cause a {@link NullPointerException} to be thrown.
 * <p>
 * <b>Security note:</b>
 * If an application needs to read a password or other secure data, it should
 * use {@link #readPassword()} or {@link #readPassword(String, Object...)} and
 * manually zero the returned character array after processing to minimize the
 * lifetime of sensitive data in memory.
 *
 * <blockquote><pre>{@code
 * Console cons;
 * char[] passwd;
 * if ((cons = System.console()) != null &&
 *     (passwd = cons.readPassword("[%s]", "Password:")) != null) {
 *     ...
 *     java.util.Arrays.fill(passwd, ' ');
 * }
 * }</pre></blockquote>
 *
 * @author  Xueming Shen
 * @since   1.6
 */

大意如下:

方法访问基于字符的控制台程序,如果获得批准的话就将其与该程序所属的java虚拟机链接。

虚拟机是否含有控制台取决于底层系统平台和该对虚拟机的调用方法。

如果虚拟机从命令行启动且没有重定向标准输入输出流,则将存在控制台,并且通常和键盘以及虚拟机的显示相连接

如果虚拟机自动启动,例如后台调度程序,则一般不会存在控制台

如果虚拟机含有控制台,则该控制台为该类调用java.lang.System中的console方法获得的唯一实例

如果没有控制台可用时,则上述方法返回值为null

读和写操作为属于同步类型的操作(线程锁)来保证关键步骤的原子层面操作。

因此,除调用方法readLine()、readPassword()、format()、printf()以外,读、写和格式化的操作通过writer或reader返回一个对象的情况可以嵌入多线程方案

对reader和writer返回的对象调用close方法将不会关闭该对象包含的底层流

当控制台的输入流读取结束后,控制台再调用read方法将会返回空值

例如,键入control+d在Unix下或者键入control+z在Windows下,随后如果输入字符,读取操作将会成功。

除非另有说明,否则向该类中的任意方法传递空值会抛出空指针异常。

安全手册:

如果一个应用需要去读取密码或者其他安全数据,它应该使用readPassword()方法并且该敏感数据在内存中的存在周期被最小化处理后应手动清零

引例:

 Console cons;
 char[] passwd;
 if ((cons = System.console()) != null &&
      (passwd = cons.readPassword("[%s]", "Password:")) != null) {
      ...
      java.util.Arrays.fill(passwd, ' ');
 }



该类含有十个成员变量:

线程读取锁:

private Object readLock;

线程写入锁:

private Object writeLock;

控制台唯一保有的Reader:

private Reader reader;

控制台唯一保有的Writer:

private Writer out;

控制台唯一保有的PrintWriter:

private PrintWriter pw;

控制台的格式控制器:

private Formatter formatter;

当前使用字符集名称:

private Charset cs;

存储字符的缓冲区:

private char[] rcb;

是否显示:

private static boolean echoOff;

当前控制台对象:

private static Console cons;




该类含有如下方法:

从控制台取回唯一关联PrinterWriter:

public PrintWriter writer() {
    return pw;
}

从控制台取回唯一关联Reader:

public Reader reader() {
    return reader;
}

 使用指定格式字符串和参数将格式化字符串写入此控制台输出流的方法(会忽略比格式字符多的参数):

public Console format(String fmt, Object ...args) {//动态参数
    formatter.format(fmt, args).flush();//将对象按格式写入字符串并将字符串写入输出流
    return this;//返回本控制台
}
使用指定格式字符串和参数将格式化字符串写入此控制台输出流的便捷方法:(完全没看出来怎么个便捷法,注释和api也没有说明,使用该方法还要比直接使用format多个入栈出栈的操作)(笑
public Console printf(String format, Object ... args) {
    return format(format, args);
}
提供一个格式化提示,并从控制台读取单行文本:
public String readLine(String fmt, Object ... args) {
    String line = null;
    synchronized (writeLock) {//写锁
        synchronized(readLock) {//读锁
            if (fmt.length() != 0)//格式化提示长度不为零
                pw.format(fmt, args);//按照提示符格式化
            try {
                char[] ca = readline(false);
                if (ca != null)//readline读取成功
                    line = new String(ca);
            } catch (IOException x) {
                throw new IOError(x);
            }
        }
    }
    return line;
}

直接读取单行文本(无格式化提示):

public String readLine() {
    return readLine("");
}

提供一个格式化信息,从控制台读取安全数据(如密码),禁用返回值显示:

public char[] readPassword(String fmt, Object ... args) {
    char[] passwd = null;
    synchronized (writeLock) {
        synchronized(readLock) {
            try {
                echoOff = echo(false);//禁用返回值显示
            } catch (IOException x) {
                throw new IOError(x);
            }
            IOError ioe = null;
            try {
                if (fmt.length() != 0)
                    pw.format(fmt, args);
                passwd = readline(true);
            } catch (IOException x) {
                ioe = new IOError(x);
            } finally {
                try {
                    echoOff = echo(true);//启用返回值显示
                } catch (IOException x) {
                    if (ioe == null)
                        ioe = new IOError(x);
                    else
                        ioe.addSuppressed(x);
                }
                if (ioe != null)
                    throw ioe;
            }
            pw.println();//打印格式化密码
        }
    }
    return passwd;//返回密码值
}

返回无格式化密码:

public char[] readPassword() {
    return readPassword("");
}

将PrintWriter数据全部写出:

public void flush() {
    pw.flush();
}

解码:

private static native String encoding();

修改返回值显示状态:

private static native boolean echo(boolean on) throws IOException;

读取一行文本并返回:

private char[] readline(boolean zeroOut) throws IOException {
    int len = reader.read(rcb, 0, rcb.length);//将数据读入缓冲区并返回实际读取长度
    if (len < 0)
        return null;  //EOL
    if (rcb[len-1] == '\r')//换行符
        len--;        //remove CR at end;
    else if (rcb[len-1] == '\n') {//新行符
        len--;        //remove LF at end;
        if (len > 0 && rcb[len-1] == '\r')
            len--;    //remove the CR, if there is one
    }
    char[] b = new char[len];
    if (len > 0) {
        System.arraycopy(rcb, 0, b, 0, len);
        if (zeroOut) {//是否清空缓冲区
            Arrays.fill(rcb, 0, len, ' ');
        }
    }
    return b;//返回被读取的文本
}

增加读取缓冲区的容量(为当前的二倍):

private char[] grow() {
    assert Thread.holdsLock(readLock);//断言当前程序拥有读取锁
    char[] t = new char[rcb.length * 2];
    System.arraycopy(rcb, 0, t, 0, rcb.length);
    rcb = t;
    return rcb;
}

判定当前是否为终端与控制台链接:

private native static boolean istty();

私有构造函数:(无法在类外访问,也就是无法直接new出来,有许多特殊的“套路”,在这里我就不详细说明了,由兴趣的可以自己研究,在这里主要是与后述的静态代码块配合生成控制台(封装了控制台的生成条件),也算是“套路”的一种)

private Console() {
    readLock = new Object();//初始化成员变量
    writeLock = new Object();
    String csname = encoding();//获得当前使用的字符集
    if (csname != null) {
        try {
            cs = Charset.forName(csname);
        } catch (Exception x) {}
    }
    if (cs == null)
        cs = Charset.defaultCharset();//设置为默认字符集
    out = StreamEncoder.forOutputStreamWriter(//对输出流编码
              new FileOutputStream(FileDescriptor.out),
              writeLock,
              cs);
    pw = new PrintWriter(out, true) { public void close() {} };
    formatter = new Formatter(out);
    reader = new LineReader(StreamDecoder.forInputStreamReader(//输入流解码
                 new FileInputStream(FileDescriptor.in),
                 readLock,
                 cs));
    rcb = new char[1024];//初始大小
}





内部嵌套类:

class LineReader extends Reader {
    private Reader in;//读入类
    private char[] cb;//缓冲区
    private int nChars, nextChar;//缓冲区标识符
    boolean leftoverLF;//跳过新行符标记
    LineReader(Reader in) {
        this.in = in;
        cb = new char[1024];
        nextChar = nChars = 0;
        leftoverLF = false;
    }
    public void close () {}
    public boolean ready() throws IOException {//确认流开启
        //in.ready synchronizes on readLock already
        return in.ready();
    }

    public int read(char cbuf[], int offset, int length)//从本类的缓冲区中读出特定长度数组数据
        throws IOException
    {
        int off = offset;
        int end = offset + length;
        if (offset < 0 || offset > cbuf.length || length < 0 ||
            end < 0 || end > cbuf.length) {//数组下标有效性验证
            throw new IndexOutOfBoundsException();
        }
        synchronized(readLock) {
            boolean eof = false;//结束标记
            char c = 0;
            for (;;) {
                if (nextChar >= nChars) {   //fill//读取指针超出有效长度
                    int n = 0;
                    do {
                        n = in.read(cb, 0, cb.length);
                    } while (n == 0);//读取失败后继续读取(感觉这样有可能要进死循环)
                    if (n > 0) {//成功读取
                        nChars = n;
                        nextChar = 0;
                        if (n < cb.length &&
                            cb[n-1] != '\n' && cb[n-1] != '\r') {//读取量小于缓冲空间且结尾不为换行符或新行符
                            /*
                             * we're in canonical mode so each "fill" should
                             * come back with an eol. if there no lf or nl at
                             * the end of returned bytes we reached an eof.
                             */
                            eof = true;//标记结束
                        }
                    } else { /*EOF*/
                        if (off - offset == 0)//读取指针没有修改,报错
                            return -1;
                        return off - offset;//返回实际读取长度
                    }
                }
                if (leftoverLF && cbuf == rcb && cb[nextChar] == '\n') {//当需要跳过下个新行符且传入缓冲区为Console的缓冲区,且下个字符为新行符,直接跳过
                    /*
                     * if invoked by our readline, skip the leftover, otherwise
                     * return the LF.
                     */
                    nextChar++;
                }
                leftoverLF = false;//重置标记
                while (nextChar < nChars) {
                    c = cbuf[off++] = cb[nextChar];
                    cb[nextChar++] = 0;//读取后清空缓存
                    if (c == '\n') {//读取到新行符终止
                        return off - offset;
                    } else if (c == '\r') {//当前标记为换行符
                        if (off == end) {//已完成读取目标
                            /* no space left even the next is LF, so return
                             * whatever we have if the invoker is not our
                             * readLine()
                             */
                            if (cbuf == rcb) {//传入数组为Console的缓冲数组
                                cbuf = grow();//增加缓冲区
                                end = cbuf.length;//修改终止位置
                            } else {
                                leftoverLF = true;//标记跳过下个新行符
                                return off - offset;
                            }
                        }
                        if (nextChar == nChars && in.ready()) {//缓冲区读取完毕且流仍然开启
                            /*
                             * we have a CR and we reached the end of
                             * the read in buffer, fill to make sure we
                             * don't miss a LF, if there is one, it's possible
                             * that it got cut off during last round reading
                             * simply because the read in buffer was full.
                             */
                            nChars = in.read(cb, 0, cb.length);//再次读取
                            nextChar = 0;
                        }
                        if (nextChar < nChars && cb[nextChar] == '\n') {//缓冲区未读取完毕且读取到新行符,读入新行符
                            cbuf[off++] = '\n';
                            nextChar++;
                        }
                        return off - offset;
                    } else if (off == end) {//完成读取目标
                       if (cbuf == rcb) {
                            cbuf = grow();
                            end = cbuf.length;
                       } else {
                           return off - offset;
                       }
                    }
                }
                if (eof)//流传输结束
                    return off - offset;
            }
        }
    }
}





静态代码块:(在构造函数前执行,且不论实例化多少对象都仅会运行一次,执行优先级最高)

static {
    try {
        // Add a shutdown hook to restore console's echo state should
        // it be necessary.
        sun.misc.SharedSecrets.getJavaLangAccess()
            .registerShutdownHook(0 /* shutdown hook invocation order */,
                false /* only register if shutdown is not in progress */,
                new Runnable() {
                    public void run() {
                        try {
                            if (echoOff) {
                                echo(true);
                            }
                        } catch (IOException x) { }
                    }
                });
    } catch (IllegalStateException e) {
        // shutdown is already in progress and console is first used
        // by a shutdown hook
    }

    sun.misc.SharedSecrets.setJavaIOAccess(new sun.misc.JavaIOAccess() {
        public Console console() {
            if (istty()) {
                if (cons == null)
                    cons = new Console();
                return cons;
            }
            return null;
        }

        public Charset charset() {
            // This method is called in sun.security.util.Password,
            // cons already exists when this method is called
            return cons.cs;
        }
    });
}

这部分英文注释很详细,我就不写了,作用就是设置该控制台的IO连接




该类十分特别,是目前所详细了解源码中最复杂的(没看过多少源码,才疏学浅,见谅),作为控制模块需要与各类程序、终端以及数据流有密切接触。在实际使用中虽然经常使用到该类的功能,却从未在写代码中使用过该类。有一定必要读懂该类的工作原理。


url传值异常java.io.CharConversionException: isHexDigit ajax,js传值到后台,后台出现java.io.CharConversionException: isHexDigit 异常 立即下载

相关推荐

Hodgkin-Huxley Model

介绍了经典的动力学模型:HH Model

weixin_73557167的博客 2475

java.io.CharConversionException:EOF异常(先贴进来,有时间修改)

           最近在项目开发中遇到java.io.CharConversionException:EOF 异常,异常原因是:character  decoding failed. Parameter skipped. 即对所传参数时字符编码解析失败。        有时引起的原因可能是:httpServletRequest对象中的键值对中包含:“%”。       ...

iteye_3042的博客 576

脑机接口(BCI)从原理到开发实战 10|脑控外设:用脑电波控制机械臂/游戏

摘要: 脑机接口(BCI)的“最后一公里”是将分类结果转化为实际动作的关键环节。本文介绍如何通过指令映射、硬件通信和执行反馈实现脑控外设,包括离散/连续控制策略、防抖处理及串口/蓝牙通信方法。通过两个实战案例(运动想象控制机械臂抓取、P300/SSVEP控制游戏)和完整项目(OpenBCI控制小车),演示了从分类标签到设备动作的完整流程,重点涵盖指令生成算法(多数投票)、Python与Arduino的串口通信集成,为BCI系统落地提供实用解决方案。(149字)

小明的博客 766

java.io.CharConversionException

java.io 类 CharConversionException 继承关系: java.lang.Object java.lang.Throwable java.lang.Exception java.io.IOException java.io.CharConversionException 所有已实现的接口...

☆ lijun ☆ 1291

别再手动上传了!用宝塔面板的‘Let‘s Encrypt’免费SSL证书,3分钟自动续期

本文详细介绍了如何利用宝塔面板的‘Let‘s Encrypt’功能实现SSL证书的自动申请和续期,3分钟完成配置即可永久免费使用。通过对比不同SSL证书方案,突出Let's Encrypt的免费、自动续期和高安全性优势,特别适合个人博客和中小企业官网。

weixin_30415113的博客 150

ArcGIS中如何计算多个点到特定线的最短距离

现有一个点图层和一个面图层,怎么来计算这些点到这个面图层,两个面的公共边的最短直线距离呢? 1.首先得将两个图层都转为 投影坐标系 打开工具箱-数据管理工具-要素-面转线 ​ ​ 2.将面图层设为输入要素 注意要将“识别和存储面邻域信息”勾选 ​ 3.面转线成功后 打开线属性表,线图层拥有了 LEFT_FID和RIGHT_FID两个字段 ​ 4.按属性选择,表达式中输入 “LEFT_FID”<>-1 即可选出两个面的公共边 ​再将选...

GIS蒲公英的博客 6726

java.io.CharConversionException: Not an ISO 8859-1 character: xx

java.io.CharConversionException: Not an ISO 8859-1 character: XXX 这个问题可能是因为outputstream输出中文字造成的影响。 response.setContentType("text/html;charset=UTF-8");//response.getOutputStream().print("中文字");...

weixin_33972649的博客 328

Transformer在量化交易中的应用:从时序预测到策略生成

Transformer模型凭借其强大的自注意力机制,在自然语言处理领域取得了革命性突破。其核心原理是通过并行计算和动态权重分配,有效捕捉序列数据中的长距离依赖关系。这一特性使其在金融时间序列分析中展现出巨大技术价值,能够处理市场数据中的复杂非线性模式和长期关联。在量化交易场景下,Transformer可将价格、成交量等连续数据通过离散化分桶处理,转化为类似文本的序列,进而进行预测或直接生成交易信号。本文以QuantGPT项目为例,探讨了如何将这一前沿AI架构迁移应用于金融领域,涵盖了从数据作为“语言”的编码

weixin_26757949的博客 368

java eof_java.io.CharConversionException: EOF 的解决办法

java.io.CharConversionException: EOF 的解决办法java.io.CharConversionException: EOF 异常的原因是因为httpServletRequest对象中的键值对中包含:“%”。所以要在请求链接的时候用一下js的函数encodeURI(href);这个href就是访问action的url;例如var delegateProtocolUr...

weixin_39665992的博客 455

基于Simulink/Matlab的VSG并网系统单相接地与相间短路故障仿真建模与特性分析

本文详细介绍了基于Simulink/Matlab搭建虚拟同步发电机(VSG)并网系统仿真模型的方法,并重点分析了单相接地与相间短路故障下的系统特性。通过设置三相故障模块参数,模拟了故障发生时的电压、电流变化及VSG动态响应,为理解故障机理、优化控制策略及设计继电保护提供了仿真依据与实践指导。

t8u9v0w1x的博客 515

强化学习:在智能交通系统中的应用

作者:禅与计算机程序设计艺术 这篇文章将探索如何利用强化学习(RL)这一强大的机器学习方法,在智能交通系统中实现自动驾驶、优化路线规划和提高道路安全等方面的突破。RL通过让智能体与环境互动并从这些互动中学习,从而解决复杂的决策过程问题,这正是现代智能交通系统所需要的。 背景介绍 随着城市化进程的加速,交通拥堵、能源消耗和交通事

AI天才研究院 1122

java.io.CharConversionException: isHexDigit 出现错误的原因及其解决办法

   http://wiki.jteam.cn/bin/view/Main/Tomcat-isHexDigit-Exception    Tomcat 5.526 下ajax提交数据发生如下错误:   java.io.CharConversionException: isHexDigit     根据这个错误提示,看了下Tomcat源码,发现是因为 org.apache.tomca

jTeam的专栏 1万+

openmediavault(OMV)(30)插件介绍(3)filebrowser文件管理器

filebrowser可以对omv的文件进行图形化管理,而不需要每次都通过命令进行修改。filebrowser安装。

Monster✺◟(∗❛ัᴗ❛ั∗)◞✺的博客 2321

java.io.CharConversionException: Not an ISO 8859-1 character: [下]

前端通过js 调用Java后端的文件下载功能, 后端在正式下载前,会检查下载的文件是否存在,如果不存在,则输出脚本给前端,告诉前端文件不存在;如果存在,则以附件的方式传送数据给前端。但我在输出脚本给前端时, java 报错,提示:java.io.CharConversionException: Not an ISO 8859-1 character: [下]ServletOutputStream out 只支持单字节的 8859-1 的内容,当输出中文时,改成 PrintWriter out。

madifu的博客 642

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java的一个catch语句捕获多个异常

java的一个catch语句捕获多个异常

听海边涛声 2841

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

java.io.CharConversionException: isHexDigit

java.io.CharConversionException: isHexDigit.做ajax传递参数的时候遇到这个异常,在网上找到解决办法,原来我一直没发现原来是 escape带来的错误。 下面把解决办法发出来另外感谢提供办法的朋友 忘记你是谁了 但还是谢谢 var url = "b.jsp?name=" + escape(u_name);服务端获取:String name=request.

大树下那片阴凉 4245

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

关于db2处理特殊字段出现异常java.io.charConversionException

记录一下以前遇到的问题 在使用db2数据库处理数据的时候,碰到特殊字段,出现的问题 java.io.charConversionException 官方解决方法: db2.jcc.charsetDecoderEncoder=3 so that instead of throwing an exception the JCC driver returns the Unicode REPLAC...

weixin_30614109的博客 3192

java.io.charConVersionException:EOF 产生的原因和解决方法

java.io.CharConversionException: EOF错误并提示是Character decoding failed. Parameter skipped.java.io.CharConversionException。引起的原因:httpServletRequst对象中的键值对中包含: "%" java提供了两个类:URLDecoder和URLEncoder,处理这些二进制。使...

JAVA 829

java.io.CharConversionException翻译

&lt;!-- ========= START OF TOP NAVBAR ======= --&gt;&lt;!-- --&gt; &lt;!-- --&gt; Overview Package Class Use Tree Deprecated Index Help JavaTM2PlatformStd.Ed. v1.4.2 PREV CLASS N...

编程资料大全 308

sqoop db2 java.io.CharConversionException

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33743703的博客 1991

java.io.CharConversionException:EOF异常

          最近在做SSH2整合的小例子时总遇到java.io.CharConversionException:EOF 异常,异常原因是:character  decoding failed. Parameter skipped. 即对所传参数时字符编码解析失败。 有时引起的原因可能是:httpServletRequest对象中的键值对中包含:“%”。        java中对字符编...

rnxdgzy的博客 491

hadoop安装启动后报错:CharConversionException: Invalid UTF-8 middle byte

前言 安装完windows版的hadoop后,执行命令hdfs namenode -format后报错,如下图: 原因 根据报错内容,可知: (1)hdfs-site.xml文件出的问题 (2)UTF-8编码问题 处理 修改hdfs-site.xml文件编码为utf-8 点击第一个图红框位置后,弹出第二个图,选择utf-8后确定即可(我使用的是EverEdit的文本编辑器) ...

Poppy_Evan的博客 2190
上一篇: Java 日看一类(8)之IO包中的CharArrayReader类
下一篇: Java 日看一类(10)之IO包中的DataInput接口
wyf95278
博客等级 码龄10年 38粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值