我正在服务" serveraddress / img /:imageid"有了这个功能:
public static String getImage(Request req, Response res) {
String imageId = req.params("imageid");
byte[] bytes = readImage("img/" + imageId);
return Base64.getMimeEncoder().encodeToString(bytes);
}
public static byte[] readImage(String image) {
byte[] bytes;
try {
File fff = new File(image);
FileInputStream fileInputStream = new FileInputStream(fff);
long byteLength = fff.length();
bytes = new byte[(int) byteLength];
fileInputStream.read(bytes, 0, (int) byteLength);
} catch (Exception ex) {
ex.printStackTrace();
bytes = null;
}
return bytes;
}
对于前几个请求,它会正常发送。但是当更多的,比如5或6个请求请求图像时,它开始发送服务器错误代码500而没有任何堆栈跟踪。我不确定问题是什么,但我希望有人可以帮我解决。
这是我的gradle.build文件,适用于任何想要测试它的人:
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.7.21'
compile "com.sparkjava:spark-core:2.7.1"
这也是主要功能:
public static void main(String[] args) {
BasicConfigurator.configure();
org.apache.log4j.Logger.getRootLogger().setLevel(Level.ERROR);
port(8883);
get("/img/:imageid", this::getImage);
}
答案 0 :(得分:2)
看起来您的代码永远不会关闭它使用的File
或InputStream
,因此您泄漏了文件描述符和内存。您应该使用try-with-resources或在finally块中关闭它们(在旁注中,也许您可以使用linter来警告您未关闭的资源)。