当我想将文件的全部内容写入a时OutputStream,我通常会将缓冲区分配为a byte[],然后for将read数据从文件循环到InputStream缓冲区并将缓冲区内容写入OutputStream,直到InputStream没有更多的字节可用.
这对我来说似乎很笨拙.有一个更好的方法吗?
另外,我总是不确定缓冲区大小.通常,我分配1024个字节,因为它感觉很好.有没有更好的方法来确定合理的缓冲区大小?
在我目前的情况下,我想将文件的全部内容复制到写入HTTP响应内容的输出流中.因此,这不是关于如何在文件系统上复制文件的问题.
我正在使用Scala编译服务器.这可能与我的IDE IntelliJ IDEA无关,但我只是通知您,我通过该IDE中的特殊运行配置启动Scala编译服务器.
经过一段时间没有编译任何东西,编译服务器终止,没有任何消息.通常,当我尝试编译某些内容并且编译失败时,我只会注意到这一点.然后,我需要再次启动编译服务器,当然下一次编译需要很长时间,因为它是自启动编译服务器以来的第一次编译.
如何关闭超时?我查看了scalac的联机帮助页,似乎没有选项.我可以为该运行配置添加VM选项.
我认为这个问题可能没有令人满意的答案,但无论如何我都会问它,以防我错过了什么.
基本上,我想在给定元素实例的情况下找出源文档中源自某个XML元素的行.我希望这只是为了更好的诊断错误消息 - XML是配置文件的一部分,如果它有问题,我希望能够将错误消息的读者指向XML文档中的正确位置所以他可以纠正错误.
我知道标准的Scala XML支持可能没有这样的内置功能.毕竟,NodeSeq用这样的信息注释每个单独的实例是浪费的,并不是每个XML元素都有一个源文档,从中解析它.在我看来,标准的Scala XML解析器抛出了行信息,后来无法检索它.
但是切换到另一个XML框架不是一种选择.为了更好的诊断错误消息而"仅"添加另一个库依赖项对我来说似乎不合适.此外,尽管有一些缺点,我真的很喜欢XML的内置模式匹配支持.
我唯一的希望是,您可以向我展示一种方法来更改或子类化标准Scala XML解析器,以便它生成的节点将使用源行的编号进行注释.也许NodeSeq可以为此创建一个特殊的子类.或者也许只能Atom进行子类化,因为NodeSeq它太动态了?我不知道.
无论如何,我的希望接近于零.我不认为解析器中有一个位置可以挂钩以更改节点的创建方式,并且在该位置可以获得行信息.不过,我想知道为什么我之前没有找到这个问题.如果这是重复的,请指出原件.
我在".tag"文件中有一个自定义标记,用于计算和输出值.因为我不能在这里发布代码,让我们假设一个简单的例子.
文件内容mytag.tag:
<@tag dynamic-attributes="dynamicParameters">
<%@attribute name="key" required="true"%> <%-- this works fine, in spite of dynamic-attributes --%>
<jsp:doBody var="bodyContent/">
<%-- ... here is some code to compute the value of variable "output" --%>
${output}
Run Code Online (Sandbox Code Playgroud)
调用者可以像这样轻松调用它:
<prefix:mytag key="foo">Body content...</prefix:mytag>
Run Code Online (Sandbox Code Playgroud)
这将插入标签的输出.但我也会让调用者做这样的事情:
<prefix:mytag key="foo" var="mytagOutput">Body content...</prefix:mytag>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,输出实际上不会被写入,而是分配给变量"mytagOutput",然后调用者可以使用该变量.
我知道调用者可以通过将自定义标记包装在a中来实现这一点c:set,但这并不像简单地声明"var"那样优雅.我也知道用这个@variable指令name-from-attribute可以用来实现这个目的.但是,我不知道调用者是否给出了属性"var".(如果给定,我想分配${output}给该变量,否则我想写出来${output}.)
有没有办法让我知道是否已传入"var"属性?
另一种选择是创建第二个自定义标记,可能称为"getMytag",它始终需要"var"属性并将"mytag"包装在一个中c:set.如果我在这里找不到解决办法,我会为此而努力.
(如果之前已经问过这个问题,请指出.我做了一个快速搜索,但没有找到类似的问题.)
我不能在IntelliJ CE中使用Scala插件中的Scala工作表中的类.
我做以下事情:
创建Scala SBT项目.
在src/main/scala中创建包test1.
在这个包中创建类
Run Code Online (Sandbox Code Playgroud)package test1 class TestClass { }
ws1,里面放了几个表达式.有用.
new ScalaTest到对象时ws1,IntelliJ添加import test1.ScalaTest,但工作表的评估不起作用.
如果我添加package test1到我的工作表,它根本不起作用,并警告"包名称与目录结构不对应,这可能会导致从文件中解析类的问题"

有没有想法如何使用工作表中的类?
当用户单击我的应用程序中的按钮时,它将更改正在处理的文档中的一些数据,此时我希望活动重建其 UI。如果可能的话,我想这样做,因为对于任何给定的更改,确切需要更新哪些视图将很难提前知道。
我尝试获取intent、调用finish()该活动,然后StartActivity以相同的意图调用。使用此方法,我可以禁用所有待处理的转换,所以这很好,除非它创建了活动的新实例,其状态无法恢复(除非我做了一些非常愚蠢的事情,例如将其保存到首选项)。这是不可接受的,因为该活动包含一个ViewPager,每当我更新某些内容时,它都会使用此方法返回到第 0 页。
接下来我尝试使用Activity.Recreate(). 这解决了状态未保存的问题,因为它看起来是活动的同一实例。但在这种情况下,我无法弄清楚如何禁用所有动画,因此屏幕上总是闪烁。
有没有办法让an activity.recreate()用户觉得通话无缝?或者,还有更好的方法?由于这一切都在viewpager中,因此刷新片段也可以正常工作,但这不是从片段类本身发生的,而是在许多对象中发生的,每个对象都提供了 UI 的一部分。
在下文中,我将仅提供我的Scala代码的非常简化版本.足以显示问题.不必要的代码块将减少到....
我创建了一个矢量库(也就是说,用于建模数学矢量,而不是意义上的矢量scala.collection.Vector).基本特征如下:
trait Vec[C] extends Product {
def -(o:Vec[C]):Vec[C] = ...
...
}
Run Code Online (Sandbox Code Playgroud)
我已经为特定的载体创建了许多子类型,比如Vec2二维向量,或Vec2Int专门用于二维Int向量.
子类型缩小了某些操作的返回类型.例如,Vec2Int从另一个向量中减去a 将不会返回泛型Vec[Int],但更具体Vec2Int.
另外,我已经在非常特定的子类型中声明了这些方法,例如Vec2Intas final,从而允许编译器选择那些用于内联的方法.
这非常有效,我已经为矢量计算创建了一个快速且可用的库.
在此基础上,我现在想要创建一组类型来模拟基本的几何形状.基本的形状特征如下:
trait Shape[C, V <: Vec[C]] extends (V=>Boolean) {
def boundingBox:Box[C,V]
}
Run Code Online (Sandbox Code Playgroud)
在哪里Box是Shapen维盒子的子类型.
现在,我试图定义框:
trait Box[C, V <: Vec[C]] extends Shape[C,V] {
def lowCorner:V
def highCorner:V
def boundingBox = this
def diagonal:V = highCorner - lowCorner …Run Code Online (Sandbox Code Playgroud) 我有一个基于 Maven 的 JavaFX 项目。我想在 Windows 和 Linux 上构建 Maven 项目。为了在部署捆绑包时自动化该过程,我想自动检测操作系统。
在 Windows 中我有这样的配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<compilerArguments>
<bootclasspath>${sun.boot.class.path}${path.separator}${java.home}/lib/jfxrt.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
但在 Linux 上我有这样的配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<compilerArguments>
<bootclasspath>/opt/java/lib/jfxrt.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我可以根据部署包的操作系统以某种方式设置 Java 的使用吗?