java - 在 Java 中保存二进制 STL 文件

标签 java binary save arrays stl-format

我正在尝试将一些数据保存为 STL 文件,以便在 3D 打印机上使用。 STL 文件有两种形式:ASCII 和二进制。 ASCII 格式相对容易理解和创建,但大多数 3D 打印服务要求它采用二进制格式。

有关 STL 二进制的信息在维基百科页面上进行了解释:http://en.wikipedia.org/wiki/STL_(file_format)

我知道我需要将数据放在字节数组中,但我不知道如何解释维基百科中的信息并创建字节数组。这就是我想要的帮助。

到目前为止,我的代码只是保存一个空字节数组:

byte[] bytes = null;
FileOutputStream stream = new FileOutputStream("test.stl");
    try {
        stream.write(bytes);
    } finally {
        stream.close();
}

最佳答案

如果您在最新的 Java 版本上开始一个新项目,您不应该为 OutputStreams 烦恼。请改用 Channels 和 ByteBuffers。

try(FileChannel ch=new RandomAccessFile("test.stl", "rw").getChannel())
{
  ByteBuffer bb=ByteBuffer.allocate(10000).order(ByteOrder.LITTLE_ENDIAN);
  // ...
  // e.g. store a vertex:
  bb.putFloat(0.0f).putFloat(1.0f).putFloat(42);
  bb.flip();
  ch.write(bb);
  bb.clear();
  // ...
}

这是唯一为您提供所需的小端支持的 API。然后匹配数据类型: UINT8表示无符号字节, UINT32 表示无符号整数, REAL32 表示 float , UINT16 表示无符号短整型, REAL32[3] 表示三个 float (即一个数组)

只要不超过相应有符号 Java 类型的最大值,您就不必担心数据类型的无符号性质。

关于java - 在 Java 中保存二进制 STL 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18508649/

相关文章:

java - 为什么我似乎无法从 URL 流读取整个压缩文件?

java - 如何在过滤器 ListView- Item-Click 上加载特定 Activity (多个 Intent )?

c++ - 整数到由位组成的 bool 数组,C++中最有效的方法?

python - 我想将base64转换为json

在c中将二进制int转换为二进制uint8_t

directory - 为每次运行在 Julia 中创建新目录

运行宏后保存工作簿时 Excel 2007 崩溃

java - Spring Boot 测试中的 MockBean 注解导致 NoUniqueBeanDefinitionException

java - 安卓/Java : Import text file and read out random lines from within the text file

C# - 保存程序的变量