Java ByteArray-字符串比较,不使用ByteArray.tostring()

Java ByteArray-字符串比较,不使用ByteArray.tostring(),java,arrays,string,bytearray,Java,Arrays,String,Bytearray,我正在使用Java进行MapReduce编程 我有一个字节数组,里面有10MB的数据。我想比较每个字节,看看它是否是一个空格,我的基本目的是通过使用空格分隔单词来获得这个字节数组中的每个单词(这是我的想法,欢迎任何其他建议)。我可以肯定地使用string,即首先将整个字节数组转换为string,然后进行比较,然后执行子字符串以获得每个单词,但这会复制数据。我不想要任何像stringbuilder、StringTokenizer、substring这样创建重复项的东西 我希望bytearray中的

我正在使用Java进行MapReduce编程

我有一个字节数组,里面有10MB的数据。我想比较每个字节,看看它是否是一个空格,我的基本目的是通过使用空格分隔单词来获得这个字节数组中的每个单词(这是我的想法,欢迎任何其他建议)。我可以肯定地使用string,即首先将整个字节数组转换为string,然后进行比较,然后执行子字符串以获得每个单词,但这会复制数据。我不想要任何像stringbuilder、StringTokenizer、substring这样创建重复项的东西


我希望bytearray中的每个单词都没有任何重复项,因为我正在进行内存计算,重复项会使我耗尽资源。任何关于如何继续的建议/想法都将被告知。

如果您只是想避免为整个数组创建字符串(单词的字符串也可以),您可以这样做

HashSet<String> words = new HashSet<String>();
int pos = 0;
int len = byteArray.length;
for (int i = 0; i <= len; i++) {
  if (i == len || byteArray[i] == ' ') {
    if (i > pos + 1) {
      String word = new String(byteArray, pos, i - pos, "UTF-8");
      words.add(word);
    }
    pos = i + 1;
  }
} 
HashSet words=newhashset();
int pos=0;
int len=byteArray.length;
用于(int i=0;i位置+1){
字符串字=新字符串(byteArray,pos,i-pos,“UTF-8”);
添加(word);
}
pos=i+1;
}
} 
p、 您的评论似乎建议您从文件中读取字节数组。为什么不避免这种情况,直接从文件中读取单词?如果可以使用换行符(\n)作为分隔符(而不是空格),则可以执行以下操作:

HashSet<String> words = new HashSet<String>();
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(args), "UTF-8"));
while (true) {
  String word = reader.readLine();
  if (word == null) {
    break;
  }
  words.add(word);
}
reader.close();
HashSet words=newhashset();
BufferedReader=新的BufferedReader(新的InputStreamReader(新文件InputStream(args),“UTF-8”);
while(true){
String word=reader.readLine();
if(word==null){
打破
}
添加(word);
}
reader.close();

如果我没有弄错,您可以逐字节读取文件,并将其与对应于空格的ASCII码进行比较。您不能这样做。您不确定这个字节数组代表什么字符编码。在某些编码中,确实存在空格字符的1-1 bytechar数字映射,但您想依赖它吗?因此,我可能可以检查正在使用的编码,并基于此,我可以使用逐字符ASCII代码比较…我正在浏览如何做。。。我想我可以尝试使用像byteArray.getCharAt(pos)这样的函数,它检查字符位置是否为ASCII空格。关于如何获得通过执行string.getBytes()获得的byteArray编码,有什么想法吗?“关于如何获得通过执行string.getBytes()获得的byteArray编码,有什么想法吗?”你可以,但这并不容易。。。这个10 MiB字节数组从何而来?很好的解释,谢谢,但我不使用readLine(),因为我有另一个使用并行编程的想法。。无论如何,谢谢你:)