package com.test.readtatle; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.LinkedHashMap; import java.util.Map; public class ReadTatle { public static void main(String[] args) throws IOException { String entitiy = "GBK"; BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:" + File.separator + "1.eml")); byte[] b = new byte[bis.available()]; bis.read(b); bis.close(); Map<String, String> map = new LinkedHashMap<String, String>(); byte[] newbyte = null; int begin = 0; int end = 0; for (int i = 0; i < b.length; i++) { // Integer.toHexString()转化十六进制 // if (Integer.toHexString(b[i]).equals("a") || i == b.length - 1) { end = i; //如果i等于byte[]数组长度减去1 if (i == b.length - 1) { end++; } //创建一个新的byte数组并且它的长度为end - begin newbyte = new byte[end - begin]; //然后给新的byte数组copy值,(数据源,数据开始的地方,copy到的地方,copy到的数组放的起始位置,复制的长度) System.arraycopy(b, begin, newbyte, 0, end - begin); begin = end + 1; //把字节数组转为字符串,第一个参数是字节数组,第二个参数是字符编码 String s = new String(newbyte, entitiy); System.out.println(s); //创建一个索引寻找冒号 int eml = s.indexOf(":"); //如果还有冒号 if (eml != -1) { //第一个int为开始的索引,对应String数字中的开始位置, //第二个是截止的索引位置,对应String中的结束位置 String emlKey = s.substring(0, eml); String emlVal = s.substring(eml + 1, s.length()); //把创建好的key跟val放到map.put里 map.put(emlKey, emlVal); } } } // Map.Entry是Map声明的一个内部泛型接口,entrySet()是它的方法,ntrySet()的返回值是Set集合,此集合的类型为Map.Entry for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println("key=" + entry.getKey() + "value=" + entry.getValue()); } } }
这个代码中,这一行是神马意思
(Integer.toHexString(b[i]).equals("a") || i == b.length - 1)
equals()方法比较两个对象是否相等
提醒:一般都是用"".equals(A),用A.equals("")的话A为null会报错
Integer.toHexString(b[i]).equals("a")
那这一句话的意思就是byte[i].equals("a"),byte数组中i的值是不是跟equals中的那个a相等咯?
@眉间剪水泛千愁: Integer.toHexString(b[i])是否和字符串"a"相等。返回true或者false
@无影飞絮剑: ( ⊙ o ⊙ )啊!然后 ||---→与此同时byte的长度减去1等于i么?
比较是否是同一个对象
(Integer.toHexString(b[i]).equals("a") || i == b.length - 1)这里分为两步,一是把b[i]转成字符串形式,看等不等于“a”,如果等就执行if的代码,如果不等,就去判断i是不是数组的最后一个元素。等的话就不去判断