小编kar*_*oma的帖子

如果文件不存在,则创建一个文件 - C.

我希望我的程序打开一个文件,如果它存在,或者创建该文件.我正在尝试以下代码,但我在freopen.c上得到一个调试断言.我会不会更好地使用fclose然后立即fopen?

FILE *fptr;
    fptr = fopen("scores.dat", "rb+");
    if(fptr == NULL) //if file does not exist, create it
    {
        freopen("scores.dat", "wb", fptr);
    } 
Run Code Online (Sandbox Code Playgroud)

c fopen fclose freopen

41
推荐指数
2
解决办法
20万
查看次数

ObjectInputStream无效的流标头:00000000

我想使用单个ObjectInputStream从字节数组中读取,但每次启动程序时我都会收到StreamCorruptedException.

public void run(){

        byte[] receiveBuffer = new byte[65535];

        bIn = new ByteArrayInputStream(receiveBuffer);

        try {
            in = new ObjectInputStream(bIn);
        } catch (IOException e1) {
            e1.printStackTrace();
        }

        while(true){
            try {
                packetIn = new DatagramPacket(receiveBuffer, receiveBuffer.length);
                sock.receive(packetIn);

                Object o = in.readObject();
                //do things with o
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

我只是尝试初始化ObjectInputStream以最终从字节数组中读取,但即使我删除了while循环,它也会抛出异常.

我在这做错了什么?

java

9
推荐指数
2
解决办法
3万
查看次数

使用lambda保持线程安全

我正在尝试更新一些代码以使用lambda表达式但我在保持线程安全方面遇到了一些麻烦.

我有多个线程在运行,最终调用以下回调,它有一个synchronized方法可以向a添加一些结果LinkedList.

final List<Document> mappedDocs = new LinkedList<>();
final MapCallback<Integer, Document> mapCallback = new MapCallback<Integer, Document>() {
    @Override
    public synchronized void done(int file, List<Document> results) {
        mappedDocs.addAll(results);
    }
};
Run Code Online (Sandbox Code Playgroud)

然而,当我将它转换为lambda表达式时,我丢失了synchronized关键字,我不完全确定如何将其恢复.每当我运行代码时,我现在都会收到NullPointerException.

final MapCallback<Integer, Document> mapCallback = (int file, List<Document> results) -> mappedDocs.addAll(results);
Run Code Online (Sandbox Code Playgroud)

如何让这个线程再次安全?

java lambda multithreading thread-safety

6
推荐指数
1
解决办法
5288
查看次数

Spark - 行值的总和

我有以下DataFrame:

January | February | March
-----------------------------
  10    |    10    |  10
  20    |    20    |  20
  50    |    50    |  50
Run Code Online (Sandbox Code Playgroud)

我正在尝试为此添加一列,这是每行值的总和.

January | February | March  | TOTAL
----------------------------------
  10    |    10    |   10   |  30
  20    |    20    |   20   |  60
  50    |    50    |   50   |  150
Run Code Online (Sandbox Code Playgroud)

据我所知,所有内置的聚合函数似乎都是用于计算单列中的值.如何在每行的基础上跨列使用值(使用Scala)?

我已经到了

val newDf: DataFrame = df.select(colsToSum.map(col):_*).foreach ...
Run Code Online (Sandbox Code Playgroud)

scala apache-spark

6
推荐指数
5
解决办法
2万
查看次数

((1 2)3)是否与((1 2).3)相同?

我在Scheme(使用DrRacket)中获得了一项任务,要求我使用cons从组件1,2,3和()创建列表((1 2)3)

我设法得到((1 2).3)使用:

(cons (cons '1 (cons '2 '())) '3)
Run Code Online (Sandbox Code Playgroud)

但是,那是一回事吗?

scheme racket

5
推荐指数
1
解决办法
283
查看次数

Spark UDF线程安全

我正在使用Spark来获取包含一列日期的数据框,并创建3个新列,其中包含列中日期和今天之间的天,周和月的时间.

我关心的是使用SimpleDateFormat,它不是线程安全的.通常没有Spark这可以,因为它是一个局部变量,但是使用Spark的懒惰评估,在多个UDF上共享一个SimpleDateFormat实例可能会导致问题?

def calcTimeDifference(...){
    val sdf = new SimpleDateFormat(dateFormat)

    val dayDifference = udf{(x: String) => math.abs(Days.daysBetween(new DateTime(sdf.parse(x)), presentDate).getDays)}
    output = output.withColumn("days", dayDifference(myCol))

    val weekDifference = udf{(x: String) => math.abs(Weeks.weeksBetween(new DateTime(sdf.parse(x)), presentDate).getWeeks)}
    output = output.withColumn("weeks", weekDifference(myCol))

    val monthDifference = udf{(x: String) => math.abs(Months.monthsBetween(new DateTime(sdf.parse(x)), presentDate).getMonths)}
    output = output.withColumn("months", monthDifference(myCol))
}
Run Code Online (Sandbox Code Playgroud)

concurrency scala apache-spark

5
推荐指数
1
解决办法
764
查看次数

当我尝试在Jade中显示SQL查询结果时获取[object Object]

我开始使用Node.js,我完全不知道为什么我无法在页面上呈现我的SQL查询结果.

connection.query('SELECT * FROM testTable', function selectCb(err, rows, fields) {
  if (err) {
    throw err;
  }
  for (var i in rows) {
      console.log(rows[i]);
  }
  res.render('showResults.jade', {
    results: rows
  });
});
Run Code Online (Sandbox Code Playgroud)

结果在控制台中完美显示,但是当我尝试使用Jade渲染它时,我得到了一些子弹点(等于表中的条目数),但每个子弹点后跟[object,Object].这是我的Jade文件:

h1 SQL Results are as follows:
ul
  each item, i in results
    li= item
Run Code Online (Sandbox Code Playgroud)

是否需要额外的步骤或某些东西才能使结果正确显示?

node.js pug

4
推荐指数
1
解决办法
3993
查看次数

Kotlin 如何使用 JDK 1.8 调用 Java 11 代码?

我正在玩一个 Kotlin 项目,它有一些 Java 11 调用,并注意到它似乎使用 Java 8 构建和运行良好。

特别是调用 to java.lang.String#isBlank(),它是在 Java 11 中引入的。

我正在使用 Gradle 来构建和运行测试。Build JDK 设置为 JDK 1.8,Kotlin 编译目标也是 1.8:

tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs += listOf("-Xjsr305=strict")
        jvmTarget = "1.8"
    }
}
Run Code Online (Sandbox Code Playgroud)
gradle -v

------------------------------------------------------------
Gradle 6.6
------------------------------------------------------------

Build time:   2020-08-10 22:06:19 UTC
Revision:     d119144684a0c301aea027b79857815659e431b9

Kotlin:       1.3.72
Groovy:       2.5.12
Ant:          Apache Ant(TM) version 1.10.8 compiled on May 10 2020
JVM:          1.8.0_265 (AdoptOpenJDK 25.265-b01)
OS:           Mac OS X 10.15.6 x86_64
Run Code Online (Sandbox Code Playgroud)

这是一个调用 Java 11 但仍然编译和运行的单元测试:

import org.junit.jupiter.api.Test …
Run Code Online (Sandbox Code Playgroud)

java gradle kotlin

1
推荐指数
1
解决办法
329
查看次数