我在尝试从外部模块的资源文件夹加载资源文件时遇到困难。我正在使用 IntelliJ,我们的项目是使用 Maven 构建的。
使用模块之前的原始代码是这样的:
getClass().getResourceAsStream(rulesFile)
这现在产生了null结果。
模块的结构如下:
client
- java
- org.example.client
- Controller.java
data
- java
- ...
- resources
- org.example.data.files
- rulesFile
Run Code Online (Sandbox Code Playgroud)
在模块中client:
getClass().getResourceAsStream(rulesFile) 不起作用。
但是,如果我尝试去做ModuleLayer.boot().findModule("data").get().getResourceAsStream(rulesFile),那么它工作正常。
我的问题是,是否可以使模块内部rulesFile可见,以便可以使用普通的类加载器?我想避免必须明确指定它来自的模块名称,因为在其他地方使用了从模块加载文件的类似代码。Controller.javaclientdata
我有哪些选项可以避免显式给出模块名称?
我尝试将以下内容添加到data模块文件中,但没有成功:
opens org.example.data.files to client
谢谢您的帮助!
我在减少指针分配的内存方面遇到了困难.这是完成的,因为这个指针指向一个char数组,它将存储字节,但字节数可以不同.
使用以下结构:
struct packet {
unsigned char *data
}
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我首先为数据包和数据分配内存:
struct packet *pack;
pack = malloc(sizeof(struct packet));
pack->data = malloc(MAXSIZE);
Run Code Online (Sandbox Code Playgroud)
MAXSIZE是一次读取的最大大小(256字节).
使用缓冲区读取文件并使用:将数据设置到缓冲区后pack->data= &buffer,我读取文件中的剩余字节(使用stat()计算并每次减去MAXSIZE,直到我们剩下少于MAXSIZE.)
此时,我想让数据指针分配比MAXSIZE更少的内存,因为数据不会那么大,我尝试以下代码但它失败并导致"核心转储":
free(pack->data);
printf("Memory freed.") // This never gets printed so there is an issue with free...
pack->data = malloc(remaining_size);
Run Code Online (Sandbox Code Playgroud)
remaining_size是正确计算的,所以我知道它应该正确分配.我采取了错误的做法吗?我也尝试了,realloc()但我得到了相同的结果.
非常感谢一些帮助,这是一个普遍的问题,但我需要一些类似于学校项目的工作,需要释放所有内存.如果我能解决这个问题,我应该能够释放内存.谢谢!
编辑:如果我删除free()调用,再次只是malloc(),它可以工作,但我相信这是错误的方法,因为旧的分配空间永远消失,我永远不会释放它.