小编Mad*_*doc的帖子

有没有更好的方法将文件的全部内容写入OutputStream?

当我想将文件的全部内容写入a时OutputStream,我通常会将缓冲区分配为a byte[],然后forread数据从文件循环到InputStream缓冲区并将缓冲区内容写入OutputStream,直到InputStream没有更多的字节可用.

这对我来说似乎很笨拙.有一个更好的方法吗?

另外,我总是不确定缓冲区大小.通常,我分配1024个字节,因为它感觉很好.有没有更好的方法来确定合理的缓冲区大小?

在我目前的情况下,我想将文件的全部内容复制到写入HTTP响应内容的输出流中.因此,这不是关于如何在文件系统上复制文件的问题.

java io

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

如何关闭Scala快速编译服务器(FSC)超时?

我正在使用Scala编译服务器.这可能与我的IDE IntelliJ IDEA无关,但我只是通知您,我通过该IDE中的特殊运行配置启动Scala编译服务器.

经过一段时间没有编译任何东西,编译服务器终止,没有任何消息.通常,当我尝试编译某些内容并且编译失败时,我只会注意到这一点.然后,我需要再次启动编译服务器,当然下一次编译需要很长时间,因为它是自启动编译服务器以来的第一次编译.

如何关闭超时?我查看了scalac的联机帮助页,似乎没有选项.我可以为该运行配置添加VM选项.

scala intellij-idea scalac fsc

13
推荐指数
2
解决办法
1624
查看次数

如何跟踪XML元素的源代码行(位置)?

我认为这个问题可能没有令人满意的答案,但无论如何我都会问它,以防我错过了什么.

基本上,我想在给定元素实例的情况下找出源文档中源自某个XML元素的行.我希望这只是为了更好的诊断错误消息 - XML是配置文件的一部分,如果它有问题,我希望能够将错误消息的读者指向XML文档中的正确位置所以他可以纠正错误.

我知道标准的Scala XML支持可能没有这样的内置功能.毕竟,NodeSeq用这样的信息注释每个单独的实例是浪费的,并不是每个XML元素都有一个源文档,从中解析它.在我看来,标准的Scala XML解析器抛出了行信息,后来无法检索它.

但是切换到另一个XML框架不是一种选择.为了更好的诊断错误消息而"仅"添加另一个库依赖项对我来说似乎不合适.此外,尽管有一些缺点,我真的很喜欢XML的内置模式匹配支持.

我唯一的希望是,您可以向我展示一种方法来更改或子类化标准Scala XML解析器,以便它生成的节点将使用源行的编号进行注释.也许NodeSeq可以为此创建一个特殊的子类.或者也许只能Atom进行子类化,因为NodeSeq它太动态了?我不知道.

无论如何,我的希望接近于零.我不认为解析器中有一个位置可以挂钩以更改节点的创建方式,并且在该位置可以获得行信息.不过,我想知道为什么我之前没有找到这个问题.如果这是重复的,请指出原件.

xml scala scala-2.8 scala-xml

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

JSP标记文件,可以输出其正文或将其返回到变量中

我在".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.如果我在这里找不到解决办法,我会为此而努力.

(如果之前已经问过这个问题,请指出.我做了一个快速搜索,但没有找到类似的问题.)

jsp jsp-tags

10
推荐指数
2
解决办法
1万
查看次数

如何使用带有Scala插件的IntelliJ CE中的Scala工作表中的类?

我不能在IntelliJ CE中使用Scala插件中的Scala工作表中的类.

我做以下事情:

  1. 创建Scala SBT项目.

  2. 在src/main/scala中创建包test1.

  3. 在这个包中创建类

package test1
class TestClass {
}
Run Code Online (Sandbox Code Playgroud)
  1. 在同一个包中创建Scala工作表ws1.sc,在它里面创建对象ws1,里面放了几个表达式.有用.

截图1

  1. 当我添加new ScalaTest到对象时ws1,IntelliJ添加import test1.ScalaTest,但工作表的评估不起作用.

截图2

如果我添加package test1到我的工作表,它根本不起作用,并警告"包名称与目录结构不对应,这可能会导致从文件中解析类的问题"

截图3

有没有想法如何使用工作表中的类?

scala intellij-idea

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

重新启动活动保持状态但没有动画

当用户单击我的应用程序中的按钮时,它将更改正在处理的文档中的一些数据,此时我希望活动重建其 UI。如果可能的话,我想这样做,因为对于任何给定的更改,确切需要更新哪些视图将很难提前知道。

我尝试获取intent、调用finish()该活动,然后StartActivity以相同的意图调用。使用此方法,我可以禁用所有待处理的转换,所以这很好,除非它创建了活动的新实例,其状态无法恢复(除非我做了一些非常愚蠢的事情,例如将其保存到首选项)。这是不可接受的,因为该活动包含一个ViewPager,每当我更新某些内容时,它都会使用此方法返回到第 0 页。

接下来我尝试使用Activity.Recreate(). 这解决了状态未保存的问题,因为它看起来是活动的同一实例。但在这种情况下,我无法弄清楚如何禁用所有动画,因此屏幕上总是闪烁。

有没有办法让an activity.recreate()用户觉得通话无缝?或者,还有更好的方法?由于这一切都在viewpager中,因此刷新片段也可以正常工作,但这不是从片段类本身发生的,而是在许多对象中发生的,每个对象都提供了 UI 的一部分。

android

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

Scala参数化类型问题,返回相同类型的实例

在下文中,我将仅提供我的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)

在哪里BoxShapen维盒子的子类型.

不起作用的部分

现在,我试图定义框:

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)

generics scala scala-2.8

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

检测 Windows 和 Linux 上的操作系统和 Java

我有一个基于 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 的使用吗?

javafx build maven-3 maven

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

标签 统计

scala ×4

intellij-idea ×2

scala-2.8 ×2

android ×1

build ×1

fsc ×1

generics ×1

io ×1

java ×1

javafx ×1

jsp ×1

jsp-tags ×1

maven ×1

maven-3 ×1

scala-xml ×1

scalac ×1

xml ×1