将任何原始数字的原始字节记录到文件中
Log raw bytes of any primitive number to a file
我正在为我的机器人团队开发轻量级 data/metrics 记录器。我需要能够在任何给定时间点从传感器或开关中检索数据,并且我想让它们成为我想要的任何原始数字。
目前,我有一个受保护的 Loggable
接口,它只有一个方法 Object getLogData()
。有几个 public 子接口用于不同的原始类型。它们中的每一个都可以注册到 Logger
(添加到 List<Loggable>
)以访问来自 运行 的数据。
这是用于记录来自 Loggable
类:
的数据的当前未经测试的代码
loggables.forEach((loggable) -> {
if (loggable instanceof ByteLoggable) {
writer.write((Byte) loggable.getLogData());
} else if (loggable instanceof ShortLoggable) {
writer.writeShort((Short) loggable.getLogData());
} else if (loggable instanceof IntLoggable) {
writer.writeInt((Integer) loggable.getLogData());
} else if (loggable instanceof LongLoggable) {
writer.writeLong((Long) loggable.getLogData());
} else if (loggable instanceof FloatLoggable) {
writer.writeFloat((Float) loggable.getLogData());
} else if (loggable instanceof DoubleLoggable) {
writer.writeDouble((Double) loggable.getLogData());
} else {
throw new IllegalArgumentException("Unknown loggable type: " + loggable);
}
});
这个块对我来说似乎很笨重 - 我觉得有一种我想不到的更简单的方法来做到这一点。有人有什么想法吗?
根据@BoristheSpider 的建议,我使用了访客模式(刚开始时这对我来说是一个陌生的概念)。看起来效果很好——我创建了一个 LoggableVisitor
来处理与 Loggable
的关系。接下来,我在 Loggable
接口中添加了一个 logData(LoggableVisitor)
方法。该代码尚未经过测试,但已经清理了很多。再次感谢您向我介绍访客概念!
我正在为我的机器人团队开发轻量级 data/metrics 记录器。我需要能够在任何给定时间点从传感器或开关中检索数据,并且我想让它们成为我想要的任何原始数字。
目前,我有一个受保护的 Loggable
接口,它只有一个方法 Object getLogData()
。有几个 public 子接口用于不同的原始类型。它们中的每一个都可以注册到 Logger
(添加到 List<Loggable>
)以访问来自 运行 的数据。
这是用于记录来自 Loggable
类:
loggables.forEach((loggable) -> {
if (loggable instanceof ByteLoggable) {
writer.write((Byte) loggable.getLogData());
} else if (loggable instanceof ShortLoggable) {
writer.writeShort((Short) loggable.getLogData());
} else if (loggable instanceof IntLoggable) {
writer.writeInt((Integer) loggable.getLogData());
} else if (loggable instanceof LongLoggable) {
writer.writeLong((Long) loggable.getLogData());
} else if (loggable instanceof FloatLoggable) {
writer.writeFloat((Float) loggable.getLogData());
} else if (loggable instanceof DoubleLoggable) {
writer.writeDouble((Double) loggable.getLogData());
} else {
throw new IllegalArgumentException("Unknown loggable type: " + loggable);
}
});
这个块对我来说似乎很笨重 - 我觉得有一种我想不到的更简单的方法来做到这一点。有人有什么想法吗?
根据@BoristheSpider 的建议,我使用了访客模式(刚开始时这对我来说是一个陌生的概念)。看起来效果很好——我创建了一个 LoggableVisitor
来处理与 Loggable
的关系。接下来,我在 Loggable
接口中添加了一个 logData(LoggableVisitor)
方法。该代码尚未经过测试,但已经清理了很多。再次感谢您向我介绍访客概念!