我从 Oracle JDK11 升级到 Oracle JDK 12 和 14,并注意到更高版本(12 和 14)在呈现字体“MS Reference Sans Serif”时似乎有问题。有谁知道为什么以及如何解决?我怀疑它可能与特定字体有关。也许他们在 JDK 12 中放弃了 TrueType、FreeType 或他们使用的任何渲染支持。我没有看到其他字体存在同样的问题。我想我可以简单地更改字体,但我喜欢这种特定的字体,并希望尽可能让它工作。
甲骨文 JDK 11:
甲骨文 JDK 14:
代码:
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class JavaFontTest extends JPanel {
public JavaFontTest() {
setBackground(Color.blue);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.setFont(new Font("MS Reference Sans Serif", Font.BOLD, 12));
g.drawString("The Quick Brown Fox", 0, 30);
g.drawString("Jumped over the Well", 0, 60);
}
public static …Run Code Online (Sandbox Code Playgroud) fwrite()在将要写入磁盘的数据移交给操作系统后,该函数是否返回,或者仅在数据实际物理写入磁盘后才返回?
对于我的情况,我希望这是第一种情况,因为我不想等到所有数据都被物理写入磁盘.我希望另一个操作系统线程在后台传输它.
在这种特殊情况下,我对Windows 10的行为感到好奇.
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/fwrite
我有一些文本存储在字符串中。每当我看到特定的字符序列时,我想在模式后面插入一些字符(将字符串中的所有现有字符移动到字符串中较晚/较高的索引)。我认为最有效的方法是保留一个大字符数组(大是因为我不知道到底需要多少插入,但我确实知道添加的字符总数将小于原始字符串的长度),然后迭代原始字符串,将字符复制到新的字符数组中,然后每当识别到字符模式时,插入新字符串,然后继续从源/原始字符串复制字符。有人能想到更快或更好的方法吗?这会经常发生,所以我想尽可能地优化它。
更新:一些人建议使用 std::string 路线而不是字符数组,以避免与字符数组相关的内存管理。
我正在寻找的模式是一个 5 个字符的字符串,然后我一直寻找,直到看到换行符,然后在此时附加 3 或 5 个字符。我会通过做这样的事情来实现它:
bool matchedstart = false;
std::string origstr;
unsigned int strlength = origstr.length();
int strlengthm5 = origstr.length() - 5;
for(int i = 0, j = 0; i < strlength; i++, j++) {
if(!matchedstart && i < strlengthm5) {
if(origstr[i] == 't' && origstr[i+1] == 'n' && origstr[i+2] = 'a'...) {
matchedstart = true;
}
}
else if(origstr[i] == '\n') {
//append extra text here
matchedstart = false;
}
outputstr[j] = …Run Code Online (Sandbox Code Playgroud)