- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
已连接两个支持蓝牙的设备。一个通过outputStream向另一个发送周期性时间戳(writeTime),另一个通过inputStream检索writeTimes并附加自己的时间戳(readTime)以进行比较。我的目标是使每个循环的读取时间等于写入时间。下面的代码使 writeTimes 以预定的延迟(3 秒)递增,但 readTimes 不递增。当两个设备相互连接时,读取时间是固定的。以下是 outputStream.write 和 inputStream.read 的 fragment 以及示例结果。
对于发送设备:在写入输出流之间有三秒延迟的计时器内循环:有一个 CountDownTimer 驱动 onTick
public void onTick(long millisUntilFinished) {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat mdformat = new SimpleDateFormat("HH:mm:ss");
String thisTime = mdformat.format(calendar.getTime());
tV.setText("Current Time: " + thisTime); // thisTime increments on the display in real time.
try {
thisTime=thisTime+ "^"; // "^" added as the end of a line
outputStream.write(thisTime.getBytes(Charset.forName("UTF-8")));
} catch (IOException e) {}
对于接收设备:读取循环 (iloop),其迭代次数与发送方的写入循环相同:
for (iloop =1;iloop<6;iloop++) {
inputStream = socket.getInputStream();
byte[] inbyte = new byte[1];
int inbuffer;
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
writeTime = "";
eol = false;
do {
inbuffer = br.read();
if (inbuffer != 94) { // character "^" (byte 94) triggers an end-of-line for each read.
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
dos.writeInt(inbuffer);
inbyte = bos.toByteArray();
next = new String(inbyte, "UTF-8");
writeTime = writeTime + next;
} else {eol = true;}
} while (!eol);
readTime = mdformat.format(calendar.getTime());
readarray[iloop] = "\r\n" + writeTime + " " + readTime ;
}
}
readarray 写入后的屏幕截图:(五行循环,写入之间有 3 秒延迟):
14:44:12 14:44:02
14:44:15 14:44:02
14:44:18 14:44:02
14:44:21 14:44:02
14:44:24 14:44:02
结论:正在读取 inputStream,其时间戳等于套接字连接的开始时间。(在示例输出中,我在连接后等待了十秒,然后才开始写入outputStream)。如何让 readTime 反射(reflect) writeTime?我的最终目标是以周期性速率从输入流中读取数据,而不是在单个批处理中批量处理大量小读取。我想实时访问每次读取并知道读取发生的时间。
这篇文章的更新:我从 Ole VV 获得了见解,只是将以下三行代码从读取循环 (iloop) 外部移动到 readTime 上方的 iloop 内部
Calendar calendar = Calendar.getInstance();
SimpleDateFormat mdformat = new SimpleDateFormat("HH:mm:ss");
String strDate;
这解决了问题。我应该明白,calendar是Calendar的一个实例,其特征calendar.getTime()不会随着时钟的滴答声而改变。过时的 SimpeDateFormat 并不是错误,尽管 Ole VV 建议替换它可能在其他应用程序中有用。
最佳答案
将当前时间(例如从流中读取的时间)放入字符串中:
DateTimeFormatter timeFormatter
= DateTimeFormatter.ofLocalizedTime(FormatStyle.MEDIUM);
String readTime = LocalTime.now(ZoneId.of("America/Dawson"))
.format(timeFormatter);
DateTimeFormatter
可以在循环外部创建,但您必须在循环内部调用 LocalTime.now
来获取当前迭代的时间。
我的区域设置中的示例结果是一个 11.57.13
字符串。请替换您想要的时区,我把 America/Dawson 放在其中。
我正在使用 java.time,现代 java 日期和时间 API,因为您使用的日期和时间类 Calendar
和 SimpleDateFormat
始终具有设计问题现在已经过时了。考虑不再使用它们。
您没有提供完整的示例,因此问题中的 fragment 无法按原样编译和运行,而且我无法验证。然而,似乎您在循环外部创建了一个 Calendar
对象,并且稍后没有修改该 Calendar
对象的时间。因此,它会保留自己的时间,而该时间就是您每次循环所获得的时间。 (相比之下,在编写方面,您在每次调用 onTick
时都会创建一个新的 Calendar
对象,这就是为什么您每次都会获得当前时间。)
是的,java.time
在旧版和新版 Android 设备上都能很好地工作。它只需要至少 Java 6。
org. Threeten.bp
和子包中导入日期和时间类。java.time
。关于java - Android蓝牙周期性调用inputStream和outputStream : inconsistent timestamps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53346624/
我在一个类中有两个方法: private static InputStream getSongStream(String ip, String id){ try { U
我创建了一个扩展 InputStream 的新类并且必须 @Override read()。我正在尝试使用方法 read(int b),但是当我使用它时,它会转到方法read() 和我不能使用参数,我
我正在尝试编写一个函数,该函数将接受带有压缩文件数据的 InputStream 并返回另一个带有解压缩数据的 InputStream。 压缩后的文件将只包含一个文件,因此不需要创建目录等... 我尝试
我想知道是否有任何理想的方式可以将多个 InputStream 链接到 Java(或 Scala)中的一个连续 InputStream 中。 我需要它来解析我从 FTP 服务器通过网络加载的平面文件。
我想做的是:打开大文件的 InputStream,按 10MB block 读取它,上传一个 block ,读取下一个 block 。 val chunkCount = Math.ceil(total
我不知道怎么理解: { if (inputStream **!= null**) { inputStream.close(); 来自那个例子: public c
我想知道 InputStream 是否为空,但不使用 read() 方法。有没有办法不读取就知道它是否为空? 最佳答案 不,你不能。 InputStream 设计用于处理远程资源,因此在实际读取它之前
我制作了一个蓝牙输入流监听器,只需询问 if(InputStream.isAvailable > 0) 即可检查是否有传入数据,然后创建一个循环将传入数据存储到 int[] 直到没有更多并且它工作完美
这是我的代码流程,文件内容丢失,我认为可能是 IOUtils.toByteArray() 行有问题,请指导这里实际出了什么问题。 文件内容丢失: InputStream stream = someCl
我从 HTTP 请求的响应开始: InputStream responseInputStream = response.getEntityInputStream() 我需要对该响应进行 gzip 压缩
用户将一个大文件上传到我的网站,我想对该文件进行 gzip 压缩并将其存储在 blob 中。所以我有一个未压缩的 InputStream,而 blob 需要一个 InputStream。我知道如何使用
我调用了一个返回压缩文件的服务。我从响应中将数据作为 InputStream(由 javax.activation.DataHandler.getInputStream(); 提供)提供。 我想做的是
我正在尝试压缩一个 InputStream 并返回一个 InputStream: public InputStream compress (InputStream in){ // Read "in
我最近在 Kotlin 中看到了将 InputStream 的全部内容读入 String 的代码,例如: // input is of type InputStream val baos = Byte
我正在尝试使用以下代码从 IHTTPSession.getInputStream() 读取 InputStream,但它每次都给出 Socket TimeOut Exception。 private
如 How to use Jersey interceptors to get request body 中所述,我正在修改 ContainerRequestFilter 中的 EntityInput
我正在编写一个需要与蓝牙 2.1 设备交换数据的应用程序。我已经做过好几次了,但这次发生了一些奇怪的事情。 Log.d("TAG", "connectToDevice"); if(ma
我只是在犹豫这是好主意还是坏主意: InputStreamReader in = new InputStreamReader(socket.getInputStream()); BufferedRea
我正在开发一个 Android 应用程序,它的 View 包含多个图库。图库的内容(位图)是来自 Internet 的红色。 对于第一个画廊,一切正常,但是当尝试下载第二个画廊的第一张图片时,Bitm
在Dart中,我想读取BMP,所以可能是BIG文件。 我这样做是这样的: var inputStream = imageFile.openInputStream(); inputStream.onDa
我是一名优秀的程序员,十分优秀!