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