ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

033.byte[]与String互转不一致引起的bug

2022-09-06 01:00:19  阅读:176  来源: 互联网

标签:java String int new 互转 033 teamRanking public


 

 

1.结论​

      Java中String内置的public String(byte[] bytes)和public byte[] getBytes()对于不合法的utf-8字节流在解析时会增删字节。

2.为什么会出现这样的bug?

    (1)首先准备这样的一段文本aaa.txt

 

China WangLei WangTao 3,USA jordan alex 1,Australia kobe james 2,UK Dale Tracy 4

 

 (2)Team.java

package com.test.demo;

public class Team
{
public int teamRanking;//球队排名

public Team()
{

}

public Team(int teamRanking)
{
this.teamRanking = teamRanking;
}

public int getTeamRanking()
{
return teamRanking;
}

public void setTeamRanking(int teamRanking)
{
this.teamRanking = teamRanking;
}
}

 (3)TeamMain.java

package com.test.demo;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;

public class TestMain
{
public int inDataTeamArraylist(String fileName) throws IOException
{
FileInputStream fisRead = new FileInputStream(fileName);
byte[] byteRead = new byte[1000];
fisRead.read(byteRead);
fisRead.close();
String stringRead = new String(byteRead);
String[] stringArray = stringRead.split(",");//这里获取到的是4个String字符串
for (int i = 0; i < stringArray.length; i++)
{
System.out.println(Integer.parseInt(stringArray[i].split(" ")[3]));

}
return 0;
}

public static void main(String[] args) throws IOException
{
String file = "D:\\idea\\storehouse\\Item\\untitledTest\\src\\com\\test\\demo\\aaa.txt";
TestMain testMain = new TestMain();
System.out.println(testMain.inDataTeamArraylist(file));
}

}

 (4)运行结果,报错的原因就是,byte[]与String互转不一致引起的bug

 

 

 

(5)改正后的TestMain.java

package com.test.demo;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;

public class TestMain
{
public String inDataTeamArraylist(String fileName) throws IOException
{
FileInputStream fisRead = new FileInputStream(fileName);
StringBuilder stringBuilder = new StringBuilder(100);
int ch;
while ((ch = fisRead.read()) != -1)
{
stringBuilder.append((char)ch);
}
fisRead.close();

String[] stringArray = stringBuilder.toString().split(",");//这里获取到的是4个String字符串
for (int i = 0; i < stringArray.length; i++)
{
System.out.println(Integer.parseInt(stringArray[i].split(" ")[3]));

}
return "成功了呀!!!";
}

public static void main(String[] args) throws IOException
{
String file = "D:\\idea\\storehouse\\Item\\untitledTest\\src\\com\\test\\demo\\aaa.txt";
TestMain testMain = new TestMain();
System.out.println(testMain.inDataTeamArraylist(file));
}

}

  (6)修改后的运行结果

 

 

 

 

标签:java,String,int,new,互转,033,teamRanking,public
来源: https://www.cnblogs.com/LLL0617/p/16660253.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有