Top Description Fields Constructors Methods
org.eclipse.jgit.diff

public Class RawText

extends Sequence
Class Inheritance
Imports
java.io.EOFException, .File, .IOException, .InputStream, .OutputStream, java.nio.ByteBuffer, java.util.concurrent.atomic.AtomicInteger, org.eclipse.jgit.errors.BinaryBlobException, .LargeObjectException, org.eclipse.jgit.lib.ObjectLoader, org.eclipse.jgit.util.IO, .IntList, .RawParseUtils

A Sequence supporting UNIX formatted text in byte[] format.

Elements of the sequence are the lines of the file, as delimited by the UNIX newline character ('\n'). The file content is treated as 8 bit binary text, with no assumptions or requirements on character encoding.

Note that the first line of the file is element 0, as defined by the Sequence interface API. Traditionally in a text editor a patch file the first line is line number 1. Callers may need to subtract 1 prior to invoking methods if they are converting from "line number" to "element index".

Field Summary

Modifier and TypeField and Description
private static final AtomicInteger
BUFFER_SIZE

Number of bytes to check for heuristics in isBinary(byte[]).

protected final byte[]
content

The file content for this sequence.

public static final RawText
EMPTY_TEXT

A RawText of length 0

private static final int
FIRST_FEW_BYTES

Default and minimum for BUFFER_SIZE.

protected final IntList
lines

Map of line number to starting position within content.

Constructor Summary

AccessConstructor and Description
public
RawText(byte[]
the content array. The object retains a reference to this array, so it should be immutable.
input
)

Create a new sequence from an existing content byte array.

public
RawText(byte[]
the content array. The object retains a reference to this array, so it should be immutable.
input
,
IntList
an array with 1-based offsets for the start of each line. The first and last entries should be Integer#MIN_VALUE and an offset one past the end of the last line, respectively.
lineMap
)

Create a new sequence from the existing content byte array and the line map indicating line boundaries.

public
RawText(File
the text file.
file
)

Create a new sequence from a file.

Method Summary

Modifier and TypeMethod and Description
protected String

Returns:

the region [start, end) decoded as a String.
decode
(int
first byte of the content to decode.
start
,
int
one past the last byte of the content to decode.
end
)

Decode a region of the text into a String.

public static int

Returns:

the buffer size, by default FIRST_FEW_BYTES bytes
getBufferSize
()

Obtains the buffer size to use for analyzing whether certain content is text or binary, or what line endings are used if it's text.

private int
getEnd(int i)

public String

Returns:

the line delimiter or null
getLineDelimiter
()

Get the line delimiter for the first line.

public byte[]

Returns:

the raw, unprocessed content read.
getRawContent
()

Get the raw content

public ByteBuffer

Returns:

the text for the line, without a trailing LF, as a ByteBuffer that is backed by a slice of the raw content, with the buffer's position on the start of the line and the limit at the end.
getRawString
(int
index of the line to extract. Note this is 0-based, so line number 1 is actually index 0.
i
)

Get the raw text for a single line.

private int
getStart(int i)

public String

Returns:

the text for the line, without a trailing LF.
getString
(int
index of the line to extract. Note this is 0-based, so line number 1 is actually index 0.
i
)

Get the text for a single line.

public String

Returns:

the text for lines [begin, end).
getString
(int
index of the first line to extract. Note this is 0-based, so line number 1 is actually index 0.
begin
,
int
index of one past the last line to extract.
end
,
boolean
if true the trailing LF ('\n') of the last returned line is dropped, if present.
dropLF
)

Get the text for a region of lines.

public static boolean

Returns:

true if raw is likely to be a binary file, false otherwise
isBinary
(InputStream
input stream containing the raw file content.
raw
)

Determine heuristically whether the bytes contained in a stream represents binary (as opposed to text) content.

public static boolean

Returns:

true if raw is likely to be a binary file, false otherwise
isBinary
(byte[]
the raw file content.
raw
)

Determine heuristically whether a byte array represents binary (as opposed to text) content.

public static boolean

Returns:

true if raw is likely to be a binary file, false otherwise
isBinary
(byte[]
the raw file content.
raw
,
int
number of bytes in raw to evaluate. This should be raw.length unless raw was over-allocated by the caller.
length
)

Determine heuristically whether a byte array represents binary (as opposed to text) content.

public static boolean

Returns:

true if raw is likely to be a binary file, false otherwise
isBinary
(byte[]
the raw file content.
raw
,
int
number of bytes in raw to evaluate. This should be raw.length unless raw was over-allocated by the caller.
length
,
boolean
whether raw contains the whole data
complete
)

Determine heuristically whether a byte array represents binary (as opposed to text) content.

public static boolean

Returns:

true if either byte is NUL, or if prev is CR and curr is not LF, false otherwise
isBinary
(byte
the last byte, read after prev
curr
,
byte
the previous byte, read before last
prev
)

Determines from the last two bytes read from a source if it looks like binary content.

public static boolean

Returns:

true if raw is likely to be CR-LF delimited text, false otherwise
isCrLfText
(byte[]
the raw file content.
raw
)

Determine heuristically whether a byte array represents text content using CR-LF as line separator.

public static boolean

Returns:

true if raw is likely to be CR-LF delimited text, false otherwise
isCrLfText
(InputStream
input stream containing the raw file content.
raw
)

Determine heuristically whether the bytes contained in a stream represent text content using CR-LF as line separator.

public static boolean

Returns:

true if raw is likely to be CR-LF delimited text, false otherwise
isCrLfText
(byte[]
the raw file content.
raw
,
int
number of bytes in raw to evaluate.
length
)

Determine heuristically whether a byte array represents text content using CR-LF as line separator.

public static boolean

Returns:

true if raw is likely to be CR-LF delimited text, false otherwise
isCrLfText
(byte[]
the raw file content.
raw
,
int
number of bytes in raw to evaluate.
length
,
boolean
whether raw contains the whole data
complete
)

Determine heuristically whether a byte array represents text content using CR-LF as line separator.

public boolean

Returns:

true if the last line has an LF; false otherwise.
isMissingNewlineAtEnd
()

Determine if the file ends with a LF ('\n').

public static RawText

Returns:

the RawText representing the blob.
load
(ObjectLoader
the ObjectLoader for the blob
ldr
,
int
if the blob is larger than this size, it is always assumed to be binary.
threshold
)

Read a blob object into RawText, or throw BinaryBlobException if the blob is binary.

public static int

Returns:

the size actually set
setBufferSize
(int
Size to set
bufferSize
)

Sets the buffer size to use for analyzing whether certain content is text or binary, or what line endings are used if it's text.

public int

Returns:

total number of items in the sequence.
size
()

Implements abstract org.eclipse.jgit.diff.Sequence.size.

Get size

public void
writeLine(OutputStream
stream to copy the line data onto.
out
,
int
index of the line to extract. Note this is 0-based, so line number 1 is actually index 0.
i
)

Write a specific line to the output stream, without its trailing LF.

Field Detail

BUFFER_SIZEback to summary
private static final AtomicInteger BUFFER_SIZE

Number of bytes to check for heuristics in isBinary(byte[]).

contentback to summary
protected final byte[] content

The file content for this sequence.

EMPTY_TEXTback to summary
public static final RawText EMPTY_TEXT

A RawText of length 0

FIRST_FEW_BYTESback to summary
private static final int FIRST_FEW_BYTES

Default and minimum for BUFFER_SIZE.

linesback to summary
protected final IntList lines

Map of line number to starting position within content.

Constructor Detail

RawTextback to summary
public RawText(byte[] input)

Create a new sequence from an existing content byte array.

The entire array (indexes 0 through length-1) is used as the content.

Parameters
input:byte[]

the content array. The object retains a reference to this array, so it should be immutable.

RawTextback to summary
public RawText(byte[] input, IntList lineMap)

Create a new sequence from the existing content byte array and the line map indicating line boundaries.

Parameters
input:byte[]

the content array. The object retains a reference to this array, so it should be immutable.

lineMap:IntList

an array with 1-based offsets for the start of each line. The first and last entries should be Integer#MIN_VALUE and an offset one past the end of the last line, respectively.

Since
5.0
RawTextback to summary
public RawText(File file) throws IOException

Create a new sequence from a file.

The entire file contents are used.

Parameters
file:File

the text file.

Exceptions
IOException:
if Exceptions occur while reading the file

Method Detail

decodeback to summary
protected String decode(int start, int end)

Decode a region of the text into a String. The default implementation of this method tries to guess the character set by considering UTF-8, the platform default, and falling back on ISO-8859-1 if neither of those can correctly decode the region given.

Parameters
start:int

first byte of the content to decode.

end:int

one past the last byte of the content to decode.

Returns:String

the region [start, end) decoded as a String.

getBufferSizeback to summary
public static int getBufferSize()

Obtains the buffer size to use for analyzing whether certain content is text or binary, or what line endings are used if it's text.

Returns:int

the buffer size, by default FIRST_FEW_BYTES bytes

Since
6.0
getEndback to summary
private int getEnd(int i)
getLineDelimiterback to summary
public String getLineDelimiter()

Get the line delimiter for the first line.

Returns:String

the line delimiter or null

Since
2.0
getRawContentback to summary
public byte[] getRawContent()

Get the raw content

Returns:byte[]

the raw, unprocessed content read.

Since
4.11
getRawStringback to summary
public ByteBuffer getRawString(int i)

Get the raw text for a single line.

Parameters
i:int

index of the line to extract. Note this is 0-based, so line number 1 is actually index 0.

Returns:ByteBuffer

the text for the line, without a trailing LF, as a ByteBuffer that is backed by a slice of the raw content, with the buffer's position on the start of the line and the limit at the end.

Since
5.12
getStartback to summary
private int getStart(int i)
getStringback to summary
public String getString(int i)

Get the text for a single line.

Parameters
i:int

index of the line to extract. Note this is 0-based, so line number 1 is actually index 0.

Returns:String

the text for the line, without a trailing LF.

getStringback to summary
public String getString(int begin, int end, boolean dropLF)

Get the text for a region of lines.

Parameters
begin:int

index of the first line to extract. Note this is 0-based, so line number 1 is actually index 0.

end:int

index of one past the last line to extract.

dropLF:boolean

if true the trailing LF ('\n') of the last returned line is dropped, if present.

Returns:String

the text for lines [begin, end).

isBinaryback to summary
public static boolean isBinary(InputStream raw) throws IOException

Determine heuristically whether the bytes contained in a stream represents binary (as opposed to text) content.

Note

Do not further use this stream after having called this method! The stream may not be fully read and will be left at an unknown position after consuming an unknown number of bytes. The caller is responsible for closing the stream.

Parameters
raw:InputStream

input stream containing the raw file content.

Returns:boolean

true if raw is likely to be a binary file, false otherwise

Exceptions
IOException:
if input stream could not be read
isBinaryback to summary
public static boolean isBinary(byte[] raw)

Determine heuristically whether a byte array represents binary (as opposed to text) content.

Parameters
raw:byte[]

the raw file content.

Returns:boolean

true if raw is likely to be a binary file, false otherwise

isBinaryback to summary
public static boolean isBinary(byte[] raw, int length)

Determine heuristically whether a byte array represents binary (as opposed to text) content.

Parameters
raw:byte[]

the raw file content.

length:int

number of bytes in raw to evaluate. This should be raw.length unless raw was over-allocated by the caller.

Returns:boolean

true if raw is likely to be a binary file, false otherwise

isBinaryback to summary
public static boolean isBinary(byte[] raw, int length, boolean complete)

Determine heuristically whether a byte array represents binary (as opposed to text) content.

Parameters
raw:byte[]

the raw file content.

length:int

number of bytes in raw to evaluate. This should be raw.length unless raw was over-allocated by the caller.

complete:boolean

whether raw contains the whole data

Returns:boolean

true if raw is likely to be a binary file, false otherwise

Since
6.0
isBinaryback to summary
public static boolean isBinary(byte curr, byte prev)

Determines from the last two bytes read from a source if it looks like binary content.

Parameters
curr:byte

the last byte, read after prev

prev:byte

the previous byte, read before last

Returns:boolean

true if either byte is NUL, or if prev is CR and curr is not LF, false otherwise

Since
6.0
isCrLfTextback to summary
public static boolean isCrLfText(byte[] raw)

Determine heuristically whether a byte array represents text content using CR-LF as line separator.

Parameters
raw:byte[]

the raw file content.

Returns:boolean

true if raw is likely to be CR-LF delimited text, false otherwise

Since
5.3
isCrLfTextback to summary
public static boolean isCrLfText(InputStream raw) throws IOException

Determine heuristically whether the bytes contained in a stream represent text content using CR-LF as line separator.

Note

Do not further use this stream after having called this method! The stream may not be fully read and will be left at an unknown position after consuming an unknown number of bytes. The caller is responsible for closing the stream.

Parameters
raw:InputStream

input stream containing the raw file content.

Returns:boolean

true if raw is likely to be CR-LF delimited text, false otherwise

Exceptions
IOException:
if input stream could not be read
Since
5.3
isCrLfTextback to summary
public static boolean isCrLfText(byte[] raw, int length)

Determine heuristically whether a byte array represents text content using CR-LF as line separator.

Parameters
raw:byte[]

the raw file content.

length:int

number of bytes in raw to evaluate.

Returns:boolean

true if raw is likely to be CR-LF delimited text, false otherwise

Since
5.3
isCrLfTextback to summary
public static boolean isCrLfText(byte[] raw, int length, boolean complete)

Determine heuristically whether a byte array represents text content using CR-LF as line separator.

Parameters
raw:byte[]

the raw file content.

length:int

number of bytes in raw to evaluate.

complete:boolean

whether raw contains the whole data

Returns:boolean

true if raw is likely to be CR-LF delimited text, false otherwise

Since
6.0
isMissingNewlineAtEndback to summary
public boolean isMissingNewlineAtEnd()

Determine if the file ends with a LF ('\n').

Returns:boolean

true if the last line has an LF; false otherwise.

loadback to summary
public static RawText load(ObjectLoader ldr, int threshold) throws IOException, BinaryBlobException

Read a blob object into RawText, or throw BinaryBlobException if the blob is binary.

Parameters
ldr:ObjectLoader

the ObjectLoader for the blob

threshold:int

if the blob is larger than this size, it is always assumed to be binary.

Returns:RawText

the RawText representing the blob.

Exceptions
IOException:
if the input could not be read.
BinaryBlobException:
if the blob contains binary data.
Since
4.10
setBufferSizeback to summary
public static int setBufferSize(int bufferSize)

Sets the buffer size to use for analyzing whether certain content is text or binary, or what line endings are used if it's text. If the given bufferSize is smaller than FIRST_FEW_BYTES set the buffer size to FIRST_FEW_BYTES.

Parameters
bufferSize:int

Size to set

Returns:int

the size actually set

Since
6.0
sizeback to summary
public int size()

Implements abstract org.eclipse.jgit.diff.Sequence.size.

Doc from org.eclipse.jgit.diff.Sequence.size.

Get size

Returns:int

total number of items in the sequence.

Annotations
@Override
writeLineback to summary
public void writeLine(OutputStream out, int i) throws IOException

Write a specific line to the output stream, without its trailing LF.

The specified line is copied as-is, with no character encoding translation performed.

If the specified line ends with an LF ('\n'), the LF is not copied. It is up to the caller to write the LF, if desired, between output lines.

Parameters
out:OutputStream

stream to copy the line data onto.

i:int

index of the line to extract. Note this is 0-based, so line number 1 is actually index 0.

Exceptions
IOException:
the stream write operation failed.