Java字节流和字符流(utf-8,ascll,unicode)

  • 1 byte = 8 bit
  • 1 char = 2 byte = 16 bit

ascll,unicode,utf-8

在字节流传输中,传输的是一个字节,一个字节8位,则最多能表现出256种字符,则一个字节通过ASCII码表则可以查找出相应的字符

public class OrderTest1 {
    @Test
    public void say2() {
        String fileEncoding = System.getProperty("file.encoding");
        System.out.println(fileEncoding);  // UTF-8
        byte[] bytes = "A".getBytes();
        for (byte b : bytes) {
            System.out.println(b);  //65
        }
    }
}

由上所知 utf-8编码规则下 字符转换成 字节数值 则 A--->65

System.out.println((char)65);  //A

用字节数值强制转换成字符,则65--->A

ASCII码表中的字节数值范围是0-256,如果超过了256,则按照uncode编码来转换,如一般的中文就是同过unicode编码来转换的

char aaa = '中';
System.out.println((int)aaa);   //20013

在uft-8编码中,存储中文时占用2-4个字节,如下'中'字符就占用了三个 

 

 则我们常见的txt编辑器notepad++,就是根据不同的编码转成字节数值,如果数值小于256就用ASCLL码值映射为对应的字符,如果大于256就用unicode来进行映射

 字节流和字符流

我们采用字符流复制一个文本,流程如下:

 字节流复制文本:

 则在复制文本的效率方面  字节流>字符流  因为字符流需要utf-8,unicode编码转换,影响性能

字符流(字符数组)适合用在业务逻辑中需要用文本中的内容,比较或者展示,则可以用字符流

字节流(字节数组)适合用户文件的上传下载,复制备份,网络传输

图片,视频等存储并不是按照utf-8等编码存储的,所以用字符流,获取的字符由很多乱码,只能用字节流进行传输,复制备份

Java中,当你从数据库中查询数据并将其保存到`List`集合中时,通常数据是以数据库的默认字符集存储的。如果数据库中的数据是ASCII编码的,而你需要将其转换成UTF-8编码,你可以按照以下步骤进行操作: 1. 首先,确保数据库连接时已经指定了正确的字符集。对于JDBC连接,可以在建立连接时通过URL参数或设置属性来指定字符集,例如: ```java String url = "jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=UTF-8"; ``` 2. 当你从数据库中读取数据时,比如使用`ResultSet`获取数据,如果数据库字符集不是UTF-8,你可能需要在读取到`List`集合之前进行转换。这通常涉及到对字符串的显式编码转换。可以使用`String`类的构造函数或者`new String(bytes, "ASCII")`方法将字节数据转换为字符串。然后,使用`String`类的`getBytes("UTF-8")`方法将字符串转换成UTF-8编码的字节数组。 3. 将转换后的字节数组再转换回字符串,或者直接在需要的时候使用这个字节数组。 下面是一个简单的示例代码,展示了如何将`List`中的ASCII编码数据转换为UTF-8编码: ```java import java.sql.*; public class DatabaseEncodingExample { public static void main(String[] args) throws SQLException { // 假设你已经建立了数据库连接 conn String sql = "SELECT column_name FROM table_name"; PreparedStatement statement = conn.prepareStatement(sql); ResultSet resultSet = statement.executeQuery(); List<String> utf8EncodedList = new ArrayList<>(); while (resultSet.next()) { String asciiStr = resultSet.getString("column_name"); utf8EncodedList.add(new String(asciiStr.getBytes("ASCII"), "UTF-8")); } // 关闭资源 resultSet.close(); statement.close(); conn.close(); } } ``` 在上述代码中,我们使用了`getString`方法从`ResultSet`中获取数据,然后将其转换为UTF-8编码的字符串。需要注意的是,这里假设数据库中的数据实际上是ASCII编码的文本,而事实上数据库可能已经以某种方式存储了UTF-8编码的数据,这种情况下你可能不需要进行编码转换。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值