java nio传输中文乱码

之前在项目组时,写银行接口时,老是不太明白大端和小端模式会带来什么影响,今儿有空,正好把它给弄明白了。

代码如下,有详细的注释:

package com.io;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.util.Arrays;

public class IoOutput {

    public static void main(String[] args) {
        /**
         * 小端模式转化int
         */
        byte[] bytes = intToByteArray1(25105);
        System.out.println(Arrays.toString(bytes));
        System.out.println(new String(bytes));

        /**
         * DataOutputstream.writeint 来写入文件
         */
        writerFile();
        /**
         *  nio 来读入字节
         */
        readFile();

    }
    /**
     * nio高性能读取出字节数组
     * 经验证,是以小端模式存放于数组
     */
    public static void readFile(){
        try {
            FileInputStream input = new FileInputStream(new File("test.txt")) ;
            FileChannel channel = input.getChannel() ;
            long length = channel.size() ;
            ByteBuffer byteBuffer = ByteBuffer.allocate((int)length);

            channel.read(byteBuffer);
            byteBuffer.flip();
            byte[] bytes = byteBuffer.array() ;
            byteBuffer.clear();
            channel.close();
            input.close();

            int index = 0;
            int size = bytesHighFirstToInt(bytes, index);
            index += 4;
            System.out.println((char)size);
            //System.out.println(Arrays.toString(bytes));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    /**
     * 将字符“我”转化为整数,写入文件
     * 经查,以小端模式写入文件
     */
    public static void writerFile(){
        try {
            DataOutputStream output = new DataOutputStream(new FileOutputStream("test.txt"));
            char c = ‘我‘ ;
            int i = c ;
            output.writeInt(i);
            output.flush();
            output.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    /**
     * 按小端转化
     * @param i
     * @return
     */
    public static byte[] intToByteArray1(int i) {
        byte[] result = new byte[4];
        result[0] = (byte) ((i >> 24) & 0xFF);
        result[1] = (byte) ((i >> 16) & 0xFF);
        result[2] = (byte) ((i >> 8) & 0xFF);
        result[3] = (byte) (i & 0xFF);
        return result;
    }

    /**
     * 字节数组和整型的转换,大端转化,适用于读取writeInt的数据
     *
     * @param bytes 字节数组
     * @return 整型
     */
    public static int bytesHighFirstToInt(byte[] bytes, int start)
    {
        int num = bytes[start + 3] & 0xFF;
        num |= ((bytes[start + 2] << 8) & 0xFF00);
        num |= ((bytes[start + 1] << 16) & 0xFF0000);
        num |= ((bytes[start] << 24) & 0xFF000000);
        return num;
    }
}
时间: 2024-08-03 08:28:45

java nio传输中文乱码的相关文章

java 页面传输中文乱码解决方案

post 中文乱码解决方式 接受数据的时候设置 request.setCharacterEncoding("utf-8");//编码必须和页面编码一致 页面设置 <%@page import="java.net.URLDecoder"%> <%@page import="org.apache.naming.java.javaURLContextFactory"%> <%@ page language="ja

java socket输入输出中文乱码问题

http://hi.baidu.com/linjk03/item/e2028bfd990c14ea1a111feb 统一了输入输出的编码格式,是不会有乱码问题出现的. 构造Reader或Writer时,指定编码格式. in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8")); out = new BufferedWriter(new OutputStreamWriter(socket.

IDEA2014开发Java程序以及中文乱码问题的解决

IDEA2014开发Java程序以及中文乱码问题的解决 我们知道IDEA是可以很强大的集成开发环境,不仅可以开发Web工程,还可以开发Java运行程序,但是在进行Java开发之前,我们需要对IDEA做一些配置工作.步骤如下: 下载IDEA2014下载地址,过期私聊我(http://pan.baidu.com/s/1jIfbtdW) 下载JDK64位机(http://download.oracle.com/otn-pub/java/jdk/8u77-b03/jdk-8u77-windows-x64

ajax传输中文乱码解决方法

问题描述: 我是在一个jsp页面有一个保存按钮,点击时会触发saveForm()的js函数,在saveForm()函数里经过校验后,会通过ajax发送数据请求,这样就不用通过提交表单来传输数据了,ajax估计就是这样的好处吧,目前对ajax还不太熟悉. ajax传输乱码时的代码: 1 function saveForm(){ 2 if(document.theformadd.onsubmit()){ 3 disableAllBtn(true); 4 j$.ajax({ 5 type:"get&q

java链接mysql 中文乱码

{转!} 背景: 由于最近在开发一个APP的后台程序,需要Java连接远程的MySQL数据库进行数据的更新和查询操作,并且插入的数据里有中文,在插入到数据库后发现中文都是乱码.网上查了很多教程,最后都没有解决,所以在这里记录下我解决的步骤,希望能够给以后遇到相同问题朋友一个参考,同时也起到记笔记的作用.   1.数据库插入中文乱码首先需要排除的问题是,MySQL的默认字符集和对应database的字符集是什么. 通常为了以后的兼容性,建议将整个MySQL的默认字符集都设置成utf-8. 可以使用

java开发中中文乱码总结

1.jsp页面内容显示乱码 这种乱码原因很简单,一般的工具或解码程序对中文字符解析时采用默认的解码方式: <%@ page contentType="text/html; charset=ISO-8859-1"%> 我们只需修改其编码方式即可,如下: <%@ page contentType="text/html; charset=UTF-8"%> 字符集:UTF-8 > GBK > GB2312 2.jsp 与 Servlet

解决Ubuntu下的Eclipse打开Windows编写的java代码的中文乱码

其实所有的中文乱码 问题都是编码不同所导致的.这里要想让eclipse能正常显示出汉字,就要修改它的字符编码 步骤如下: 1 ,点击菜单栏中的Window(窗口),选择Preferences(首选项) 2,在出来的窗口中选择左边的General(常规).下拉出它的菜单 3,在选择Content Types选项,这是会在右边看到Text,点击拉下菜单 4,选择其中的Java Source File,然后把最下边下面的Default encoding设置成GBK(貌似GB18030和GB2312也行

201671010127 2016—2017—2 Java怎样解决Java程序中中文乱码的问题。

这是本次第二次分享新手在编程中遇到的问题,相信很多Java新手和我一样,在Java编程中会遇到中文乱码的情况,下面我就给大家分享我遇到问题和解决问题的具体过程. 我先用Notepad++写了一个如下的程序: 在第一次编译运行中出现如下的结果: 通过查阅资料,原来是由于编码格式不一致引起的,汉字的编码应该用国标编码GBK,解决此问题可以用以下方法: 1.在集成环境下,可以选择编码格式为UTF-8格式. 2.在dos里面编译时,可以将编码格式加上去 javac -encoding gbk Text.

Java中的中文乱码问题

客户端向服务器发送请求时,有两种方式post和get请求,当客户端提交的内容有中文时.服务器要进行设置才能获得中文,否则获得的是乱码.那么怎么设置呢:在servlet中进行设置,有两种情况:1:请求时服务器获得客户提交的中文, 2:响应时客户端浏览器得到响应的中文 1:服务器获得客户端提交的内容,两种情况get和post请求 1)链接.Js等get请求中文乱码处理方式 String username=new String(request.getParameter("username")