Java 拆分以前从文件读取的字节数组

Java 拆分以前从文件读取的字节数组,java,arrays,file,split,Java,Arrays,File,Split,我有一个递归函数,它将字节数组(从文件中读取)作为参数,然后尝试将其拆分为两部分以进行递归调用 例如,文件格式如下所示: word1 word2 word3 word4 .... word97 word98 word99 word100 因此,为了阅读它,我使用以下代码: byte[] content = new byte[(int) file.length()]; FileInputStream fileInputStream = null; fileInputStream = ne

我有一个递归函数,它将字节数组(从文件中读取)作为参数,然后尝试将其拆分为两部分以进行递归调用

例如,文件格式如下所示:

word1 word2
word3 word4
   ....
word97 word98
word99 word100
因此,为了阅读它,我使用以下代码:

byte[] content = new byte[(int) file.length()];
FileInputStream fileInputStream = null;

fileInputStream = new FileInputStream(file);
fileInputStream.read(content);
但是我想把内容数组分成两部分,每个部分代表原始文件的一半。例如,如果原始文件包含四行,则前半个数组将包含原始文件的前两行,后半个数组将包含原始文件的最后两行

我用了这个:

int halfTheLengthOfContent = (int) Math.ceil(content.length / 2.0);
firstHalf = Arrays.copyOfRange(content, 0, halfTheLengthOfContent)
and 

secondHalf = Arrays.copyOfRange(content, halfTheLengthOfContent + 1, content.length)
但它不起作用,因为生成的数组与我想要的不一致。 我想要的是,前半部分数组将包含与我所做的相同的内容(这次使用file1包含原始文件内容的前半部分,file2包含原始文件内容的后半部分):

例如,如果原始文件为:

word1 word2
word3 word4
word5 word6
word7 word8
那么文件1是:

word1 word2
word3 word4
文件2是这样的:

word5 word6
word7 word8
你能帮帮我吗?

字节和行的概念不能很好地结合在一起

字节是文件的核心元素,每个字符可能只有一个字节。可能有两个

将包含整个文件的
字节[]
拆分为两个偶数部分不太可能导致拆分为两个包含相同行数的
字节[]
。不太可能分裂,甚至是在断线,更可能在一个词的中间。

您需要的是将文件作为行读取并操作它们。例如:

final List<String> lines = Files.readAllLines(Paths.get("path", "to", "file"));
final int middle = lines.size() / 2;
final List<String> firstHalf = lines.subList(0, middle);
final List<String> secondHalf = lines.subList(middle, lines.size());
final List lines=Files.readAllLines(path.get(“path”、“to”、“file”));
final int middle=lines.size()/2;
最终列表前半部分=行。子列表(0,中间);
最终列表secondHalf=lines.subList(中间,lines.size());
如果文件有
4行
,则
middle
将是
2行
。前半部分将包含行
0,1
,后半部分将包含行
2,3
。请记住,
列表
是零索引的,
子列表
排除了上界

对于奇数行,后半部分将包含额外的元素。

字节和行的概念不能很好地结合在一起

字节是文件的核心元素,每个字符可能只有一个字节。可能有两个

将包含整个文件的
字节[]
拆分为两个偶数部分不太可能导致拆分为两个包含相同行数的
字节[]
。不太可能分裂,甚至是在断线,更可能在一个词的中间。

您需要的是将文件作为行读取并操作它们。例如:

final List<String> lines = Files.readAllLines(Paths.get("path", "to", "file"));
final int middle = lines.size() / 2;
final List<String> firstHalf = lines.subList(0, middle);
final List<String> secondHalf = lines.subList(middle, lines.size());
final List lines=Files.readAllLines(path.get(“path”、“to”、“file”));
final int middle=lines.size()/2;
最终列表前半部分=行。子列表(0,中间);
最终列表secondHalf=lines.subList(中间,lines.size());
如果文件有
4行
,则
middle
将是
2行
。前半部分将包含行
0,1
,后半部分将包含行
2,3
。请记住,
列表
是零索引的,
子列表
排除了上界

对于奇数行,后半部分将包含额外的元素。

字节和行的概念不能很好地结合在一起

字节是文件的核心元素,每个字符可能只有一个字节。可能有两个

将包含整个文件的
字节[]
拆分为两个偶数部分不太可能导致拆分为两个包含相同行数的
字节[]
。不太可能分裂,甚至是在断线,更可能在一个词的中间。

您需要的是将文件作为行读取并操作它们。例如:

final List<String> lines = Files.readAllLines(Paths.get("path", "to", "file"));
final int middle = lines.size() / 2;
final List<String> firstHalf = lines.subList(0, middle);
final List<String> secondHalf = lines.subList(middle, lines.size());
final List lines=Files.readAllLines(path.get(“path”、“to”、“file”));
final int middle=lines.size()/2;
最终列表前半部分=行。子列表(0,中间);
最终列表secondHalf=lines.subList(中间,lines.size());
如果文件有
4行
,则
middle
将是
2行
。前半部分将包含行
0,1
,后半部分将包含行
2,3
。请记住,
列表
是零索引的,
子列表
排除了上界

对于奇数行,后半部分将包含额外的元素。

字节和行的概念不能很好地结合在一起

字节是文件的核心元素,每个字符可能只有一个字节。可能有两个

将包含整个文件的
字节[]
拆分为两个偶数部分不太可能导致拆分为两个包含相同行数的
字节[]
。不太可能分裂,甚至是在断线,更可能在一个词的中间。

您需要的是将文件作为行读取并操作它们。例如:

final List<String> lines = Files.readAllLines(Paths.get("path", "to", "file"));
final int middle = lines.size() / 2;
final List<String> firstHalf = lines.subList(0, middle);
final List<String> secondHalf = lines.subList(middle, lines.size());
final List lines=Files.readAllLines(path.get(“path”、“to”、“file”));
final int middle=lines.size()/2;
最终列表前半部分=行。子列表(0,中间);
最终列表secondHalf=lines.subList(中间,lines.size());
如果文件有
4行
,则
middle
将是
2行
。前半部分将包含行
0,1
,后半部分将包含行
2,3
。请记住,
列表
是零索引的,
子列表
排除了上界


如果行数为奇数,则后半部分将包含额外的元素。

长度内容的一半是什么??您需要继续尝试
读取
,直到读取完所有字节。调用一次可能会读取整个文件,也可能不会读取整个文件,这就是它返回
int
的原因。Y