求解一道 Java 练习题,请喝一杯星巴克 o(╥﹏╥)o

2022-12-30 18:22:41 +08:00
 NanFengXiangWan
2902 次点击
所在节点    程序员
28 条回复
NanFengXiangWan
2022-12-30 22:32:18 +08:00
@passer9527 #20 我现在用的 Java8 等我装个 Java17 试试,请问方便截个图么
passer9527
2022-12-30 22:39:57 +08:00
@NanFengXiangWan 结果的图片,上面有人发了: https://imgur.com/4dfEeDh


学习的话,没必要用 10 年前的 java8 ,直接上 17
KevinBlandy
2022-12-31 09:26:16 +08:00
@NanFengXiangWan 我这是 JDK17 。
keshao
2022-12-31 10:01:59 +08:00
@KevinBlandy 老哥这个域名 666
msg7086
2022-12-31 13:52:44 +08:00
闲得用 Ruby 写了一个。

src = ['p1', 'p2', 'p3']
log = 'splitlog.txt'
src_data = src.map {|fn| File.open(fn, 'rb')}
output = ''
File.readlines(log).each do |line|
idx, len = line.rstrip.split(' ')
output += src_data[idx.to_i].read(len.to_i)
end
src_data.map(&:close)
File.binwrite('out.jpg', output)
levelworm
2022-12-31 19:28:42 +08:00
@NanFengXiangWan 思路不知道有没有?

大致上就是这样,首先要按行读入 txt 文件,且需要将每一行分解成两个元素。接下来要读入图片文件然后分解成一个个小文件。
huangzhe8263
2023-01-02 09:46:53 +08:00
这个不难啊,典型的面向 API 编程的题
点进来前我还以为是什么算法题
vdrapb
2023-01-06 11:06:01 +08:00
你如果是 java8 的,你把 passer9527 这位老哥的代码改造一下就可以了

// 题目要求
int singleMaxSize = 255;

// DIR 就是存放 p1, p2, p3 的目录
Path logPath = DIR.resolve("splitlog.txt");

Path jpgPath = DIR.resolve("photo.jpg");

Map<String, InputStream> inputStreamMap = new HashMap<String, InputStream>(){
private static final long serialVersionUID = 1L;
{
put("0", Files.newInputStream(DIR.resolve("p1")));
put("1", Files.newInputStream(DIR.resolve("p2")));
put("2", Files.newInputStream(DIR.resolve("p3")));
}};

List<String> list = Files.readAllLines(logPath);
try (OutputStream outputStream = Files.newOutputStream(jpgPath, StandardOpenOption.CREATE)){
list.forEach(line ->{
String[] split = line.split("\t");

String index = split[0];

int size = Integer.parseInt(split[1]);

byte[] bytes = new byte[Math.min(size, singleMaxSize)];

try {
if(inputStreamMap.get(index).read(bytes) > 0){
outputStream.write(bytes);
}
} catch (IOException e) {
e.printStackTrace();
}
});
}
inputStreamMap.values().forEach(input ->{
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
});

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/905654

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX