优化代码 优化这段代码 private byte[] getScriptData() { ClassPathResource cps = new ClassPathResource("request_rate_limiter.lua"); try (InputStream in = cps.getInputStream()) { byte[] data = new byte[in.available()]; in.read(data); return data; } catch (Exception e) { LOGGER.error("获取lua脚本异常", e); } return null; }
时间: 2024-02-25 19:57:45 浏览: 81
这段代码的问题在于,使用 `in.available()` 方法获取字节数组的长度,但这个方法并不总是返回准确的字节数组长度。另外,在出现异常时,也没有进行适当的处理。
下面是一个优化后的代码示例:
```
private byte[] getScriptData() throws IOException {
ClassPathResource cps = new ClassPathResource("request_rate_limiter.lua");
try (InputStream in = cps.getInputStream()) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
return out.toByteArray();
} catch (IOException e) {
LOGGER.error("获取lua脚本异常", e);
throw e;
}
}
```
这个实现使用了一个 `ByteArrayOutputStream` 来动态地读取字节,并且在出现异常时抛出了 `IOException`,让调用者能够适当地处理。同时,使用了一个合理的缓冲区大小,避免了重复的内存分配和复制。
阅读全文