Class MatrixUtils
- java.lang.Object
-
- org.apache.commons.math.linear.MatrixUtils
-
public class MatrixUtils extends java.lang.ObjectA collection of static methods that operate on or return matrices.- Version:
- $Revision: 983921 $ $Date: 2010-08-10 12:46:06 +0200 (mar. 10 août 2010) $
-
-
Method Summary
All Methods Static Methods Concrete Methods Deprecated Methods Modifier and Type Method Description static Array2DRowRealMatrixbigFractionMatrixToRealMatrix(FieldMatrix<BigFraction> m)static voidcheckAdditionCompatible(AnyMatrix left, AnyMatrix right)Check if matrices are addition compatiblestatic voidcheckColumnIndex(AnyMatrix m, int column)Check if a column index is valid.static voidcheckMultiplicationCompatible(AnyMatrix left, AnyMatrix right)Check if matrices are multiplication compatiblestatic voidcheckRowIndex(AnyMatrix m, int row)Check if a row index is valid.static voidcheckSubMatrixIndex(AnyMatrix m, int[] selectedRows, int[] selectedColumns)Check if submatrix ranges indices are valid.static voidcheckSubMatrixIndex(AnyMatrix m, int startRow, int endRow, int startColumn, int endColumn)Check if submatrix ranges indices are valid.static voidcheckSubtractionCompatible(AnyMatrix left, AnyMatrix right)Check if matrices are subtraction compatiblestatic BigMatrixcreateBigIdentityMatrix(int dimension)Deprecated.since 2.0, replaced bycreateFieldIdentityMatrix(Field, int)static BigMatrixcreateBigMatrix(double[][] data)Deprecated.since 2.0 replaced bycreateFieldMatrix(FieldElement[][])static BigMatrixcreateBigMatrix(java.lang.String[][] data)Deprecated.since 2.0 replaced bycreateFieldMatrix(FieldElement[][])static BigMatrixcreateBigMatrix(java.math.BigDecimal[][] data)Deprecated.since 2.0 replaced bycreateFieldMatrix(FieldElement[][])static BigMatrixcreateBigMatrix(java.math.BigDecimal[][] data, boolean copyArray)Deprecated.since 2.0 replaced bycreateFieldMatrix(FieldElement[][])static BigMatrixcreateColumnBigMatrix(double[] columnData)Deprecated.since 2.0 replaced bycreateColumnFieldMatrix(FieldElement[])static BigMatrixcreateColumnBigMatrix(java.lang.String[] columnData)Deprecated.since 2.0 replaced bycreateColumnFieldMatrix(FieldElement[])static BigMatrixcreateColumnBigMatrix(java.math.BigDecimal[] columnData)Deprecated.since 2.0 replaced bycreateColumnFieldMatrix(FieldElement[])static <T extends FieldElement<T>>
FieldMatrix<T>createColumnFieldMatrix(T[] columnData)Creates a columnFieldMatrixusing the data from the input array.static RealMatrixcreateColumnRealMatrix(double[] columnData)Creates a columnRealMatrixusing the data from the input array.static <T extends FieldElement<T>>
FieldMatrix<T>createFieldDiagonalMatrix(T[] diagonal)Returns a diagonal matrix with specified elements.static <T extends FieldElement<T>>
FieldMatrix<T>createFieldIdentityMatrix(Field<T> field, int dimension)Returnsdimension x dimensionidentity matrix.static <T extends FieldElement<T>>
FieldMatrix<T>createFieldMatrix(Field<T> field, int rows, int columns)Returns aFieldMatrixwith specified dimensions.static <T extends FieldElement<T>>
FieldMatrix<T>createFieldMatrix(T[][] data)Returns aFieldMatrixwhose entries are the the values in the the input array.static <T extends FieldElement<T>>
FieldVector<T>createFieldVector(T[] data)Creates aFieldVectorusing the data from the input array.static RealMatrixcreateRealDiagonalMatrix(double[] diagonal)Returns a diagonal matrix with specified elements.static RealMatrixcreateRealIdentityMatrix(int dimension)Returnsdimension x dimensionidentity matrix.static RealMatrixcreateRealMatrix(double[][] data)Returns aRealMatrixwhose entries are the the values in the the input array.static RealMatrixcreateRealMatrix(int rows, int columns)Returns aRealMatrixwith specified dimensions.static RealVectorcreateRealVector(double[] data)Creates aRealVectorusing the data from the input array.static BigMatrixcreateRowBigMatrix(double[] rowData)Deprecated.since 2.0 replaced bycreateRowFieldMatrix(FieldElement[])static BigMatrixcreateRowBigMatrix(java.lang.String[] rowData)Deprecated.since 2.0 replaced bycreateRowFieldMatrix(FieldElement[])static BigMatrixcreateRowBigMatrix(java.math.BigDecimal[] rowData)Deprecated.since 2.0 replaced bycreateRowFieldMatrix(FieldElement[])static <T extends FieldElement<T>>
FieldMatrix<T>createRowFieldMatrix(T[] rowData)Creates a rowFieldMatrixusing the data from the input array.static RealMatrixcreateRowRealMatrix(double[] rowData)Creates a rowRealMatrixusing the data from the input array.static voiddeserializeRealMatrix(java.lang.Object instance, java.lang.String fieldName, java.io.ObjectInputStream ois)Deserialize aRealMatrixfield in a class.static voiddeserializeRealVector(java.lang.Object instance, java.lang.String fieldName, java.io.ObjectInputStream ois)Deserialize aRealVectorfield in a class.static Array2DRowRealMatrixfractionMatrixToRealMatrix(FieldMatrix<Fraction> m)static voidserializeRealMatrix(RealMatrix matrix, java.io.ObjectOutputStream oos)Serialize aRealMatrix.static voidserializeRealVector(RealVector vector, java.io.ObjectOutputStream oos)Serialize aRealVector.
-
-
-
Method Detail
-
createRealMatrix
public static RealMatrix createRealMatrix(int rows, int columns)
Returns aRealMatrixwith specified dimensions.The type of matrix returned depends on the dimension. Below 212 elements (i.e. 4096 elements or 64×64 for a square matrix) which can be stored in a 32kB array, a
Array2DRowRealMatrixinstance is built. Above this threshold aBlockRealMatrixinstance is built.The matrix elements are all set to 0.0.
- Parameters:
rows- number of rows of the matrixcolumns- number of columns of the matrix- Returns:
- RealMatrix with specified dimensions
- See Also:
createRealMatrix(double[][])
-
createFieldMatrix
public static <T extends FieldElement<T>> FieldMatrix<T> createFieldMatrix(Field<T> field, int rows, int columns)
Returns aFieldMatrixwith specified dimensions.The type of matrix returned depends on the dimension. Below 212 elements (i.e. 4096 elements or 64×64 for a square matrix), a
FieldMatrixinstance is built. Above this threshold aBlockFieldMatrixinstance is built.The matrix elements are all set to field.getZero().
- Type Parameters:
T- the type of the field elements- Parameters:
field- field to which the matrix elements belongrows- number of rows of the matrixcolumns- number of columns of the matrix- Returns:
- FieldMatrix with specified dimensions
- Since:
- 2.0
- See Also:
createFieldMatrix(FieldElement[][])
-
createRealMatrix
public static RealMatrix createRealMatrix(double[][] data)
Returns aRealMatrixwhose entries are the the values in the the input array.The type of matrix returned depends on the dimension. Below 212 elements (i.e. 4096 elements or 64×64 for a square matrix) which can be stored in a 32kB array, a
Array2DRowRealMatrixinstance is built. Above this threshold aBlockRealMatrixinstance is built.The input array is copied, not referenced.
- Parameters:
data- input array- Returns:
- RealMatrix containing the values of the array
- Throws:
java.lang.IllegalArgumentException- ifdatais not rectangular (not all rows have the same length) or emptyjava.lang.NullPointerException- if eitherdataordata[0]is null- See Also:
createRealMatrix(int, int)
-
createFieldMatrix
public static <T extends FieldElement<T>> FieldMatrix<T> createFieldMatrix(T[][] data)
Returns aFieldMatrixwhose entries are the the values in the the input array.The type of matrix returned depends on the dimension. Below 212 elements (i.e. 4096 elements or 64×64 for a square matrix), a
FieldMatrixinstance is built. Above this threshold aBlockFieldMatrixinstance is built.The input array is copied, not referenced.
- Type Parameters:
T- the type of the field elements- Parameters:
data- input array- Returns:
- RealMatrix containing the values of the array
- Throws:
java.lang.IllegalArgumentException- ifdatais not rectangular (not all rows have the same length) or emptyjava.lang.NullPointerException- if eitherdataordata[0]is null- Since:
- 2.0
- See Also:
createFieldMatrix(Field, int, int)
-
createRealIdentityMatrix
public static RealMatrix createRealIdentityMatrix(int dimension)
Returnsdimension x dimensionidentity matrix.- Parameters:
dimension- dimension of identity matrix to generate- Returns:
- identity matrix
- Throws:
java.lang.IllegalArgumentException- if dimension is not positive- Since:
- 1.1
-
createFieldIdentityMatrix
public static <T extends FieldElement<T>> FieldMatrix<T> createFieldIdentityMatrix(Field<T> field, int dimension)
Returnsdimension x dimensionidentity matrix.- Type Parameters:
T- the type of the field elements- Parameters:
field- field to which the elements belongdimension- dimension of identity matrix to generate- Returns:
- identity matrix
- Throws:
java.lang.IllegalArgumentException- if dimension is not positive- Since:
- 2.0
-
createBigIdentityMatrix
@Deprecated public static BigMatrix createBigIdentityMatrix(int dimension)
Deprecated.since 2.0, replaced bycreateFieldIdentityMatrix(Field, int)Returnsdimension x dimensionidentity matrix.- Parameters:
dimension- dimension of identity matrix to generate- Returns:
- identity matrix
- Throws:
java.lang.IllegalArgumentException- if dimension is not positive- Since:
- 1.1
-
createRealDiagonalMatrix
public static RealMatrix createRealDiagonalMatrix(double[] diagonal)
Returns a diagonal matrix with specified elements.- Parameters:
diagonal- diagonal elements of the matrix (the array elements will be copied)- Returns:
- diagonal matrix
- Since:
- 2.0
-
createFieldDiagonalMatrix
public static <T extends FieldElement<T>> FieldMatrix<T> createFieldDiagonalMatrix(T[] diagonal)
Returns a diagonal matrix with specified elements.- Type Parameters:
T- the type of the field elements- Parameters:
diagonal- diagonal elements of the matrix (the array elements will be copied)- Returns:
- diagonal matrix
- Since:
- 2.0
-
createBigMatrix
@Deprecated public static BigMatrix createBigMatrix(double[][] data)
Deprecated.since 2.0 replaced bycreateFieldMatrix(FieldElement[][])Returns aBigMatrixwhose entries are the the values in the the input array. The input array is copied, not referenced.- Parameters:
data- input array- Returns:
- RealMatrix containing the values of the array
- Throws:
java.lang.IllegalArgumentException- ifdatais not rectangular (not all rows have the same length) or emptyjava.lang.NullPointerException- if data is null
-
createBigMatrix
@Deprecated public static BigMatrix createBigMatrix(java.math.BigDecimal[][] data)
Deprecated.since 2.0 replaced bycreateFieldMatrix(FieldElement[][])Returns aBigMatrixwhose entries are the the values in the the input array. The input array is copied, not referenced.- Parameters:
data- input array- Returns:
- RealMatrix containing the values of the array
- Throws:
java.lang.IllegalArgumentException- ifdatais not rectangular (not all rows have the same length) or emptyjava.lang.NullPointerException- if data is null
-
createBigMatrix
@Deprecated public static BigMatrix createBigMatrix(java.math.BigDecimal[][] data, boolean copyArray)
Deprecated.since 2.0 replaced bycreateFieldMatrix(FieldElement[][])Returns aBigMatrixwhose entries are the the values in the the input array.If an array is built specially in order to be embedded in a BigMatrix and not used directly, the
copyArraymay be set tofalse- Parameters:
data- data for new matrixcopyArray- if true, the input array will be copied, otherwise it will be referenced- Returns:
- BigMatrix containing the values of the array
- Throws:
java.lang.IllegalArgumentException- ifdatais not rectangular (not all rows have the same length) or emptyjava.lang.NullPointerException- ifdatais null- See Also:
createRealMatrix(double[][])
-
createBigMatrix
@Deprecated public static BigMatrix createBigMatrix(java.lang.String[][] data)
Deprecated.since 2.0 replaced bycreateFieldMatrix(FieldElement[][])Returns aBigMatrixwhose entries are the the values in the the input array. The input array is copied, not referenced.- Parameters:
data- input array- Returns:
- RealMatrix containing the values of the array
- Throws:
java.lang.IllegalArgumentException- ifdatais not rectangular (not all rows have the same length) or emptyjava.lang.NullPointerException- if data is null
-
createRealVector
public static RealVector createRealVector(double[] data)
Creates aRealVectorusing the data from the input array.- Parameters:
data- the input data- Returns:
- a data.length RealVector
- Throws:
java.lang.IllegalArgumentException- ifdatais emptyjava.lang.NullPointerException- ifdatais null
-
createFieldVector
public static <T extends FieldElement<T>> FieldVector<T> createFieldVector(T[] data)
Creates aFieldVectorusing the data from the input array.- Type Parameters:
T- the type of the field elements- Parameters:
data- the input data- Returns:
- a data.length FieldVector
- Throws:
java.lang.IllegalArgumentException- ifdatais emptyjava.lang.NullPointerException- ifdatais null
-
createRowRealMatrix
public static RealMatrix createRowRealMatrix(double[] rowData)
Creates a rowRealMatrixusing the data from the input array.- Parameters:
rowData- the input row data- Returns:
- a 1 x rowData.length RealMatrix
- Throws:
java.lang.IllegalArgumentException- ifrowDatais emptyjava.lang.NullPointerException- ifrowDatais null
-
createRowFieldMatrix
public static <T extends FieldElement<T>> FieldMatrix<T> createRowFieldMatrix(T[] rowData)
Creates a rowFieldMatrixusing the data from the input array.- Type Parameters:
T- the type of the field elements- Parameters:
rowData- the input row data- Returns:
- a 1 x rowData.length FieldMatrix
- Throws:
java.lang.IllegalArgumentException- ifrowDatais emptyjava.lang.NullPointerException- ifrowDatais null
-
createRowBigMatrix
@Deprecated public static BigMatrix createRowBigMatrix(double[] rowData)
Deprecated.since 2.0 replaced bycreateRowFieldMatrix(FieldElement[])Creates a rowBigMatrixusing the data from the input array.- Parameters:
rowData- the input row data- Returns:
- a 1 x rowData.length BigMatrix
- Throws:
java.lang.IllegalArgumentException- ifrowDatais emptyjava.lang.NullPointerException- ifrowDatais null
-
createRowBigMatrix
@Deprecated public static BigMatrix createRowBigMatrix(java.math.BigDecimal[] rowData)
Deprecated.since 2.0 replaced bycreateRowFieldMatrix(FieldElement[])Creates a rowBigMatrixusing the data from the input array.- Parameters:
rowData- the input row data- Returns:
- a 1 x rowData.length BigMatrix
- Throws:
java.lang.IllegalArgumentException- ifrowDatais emptyjava.lang.NullPointerException- ifrowDatais null
-
createRowBigMatrix
@Deprecated public static BigMatrix createRowBigMatrix(java.lang.String[] rowData)
Deprecated.since 2.0 replaced bycreateRowFieldMatrix(FieldElement[])Creates a rowBigMatrixusing the data from the input array.- Parameters:
rowData- the input row data- Returns:
- a 1 x rowData.length BigMatrix
- Throws:
java.lang.IllegalArgumentException- ifrowDatais emptyjava.lang.NullPointerException- ifrowDatais null
-
createColumnRealMatrix
public static RealMatrix createColumnRealMatrix(double[] columnData)
Creates a columnRealMatrixusing the data from the input array.- Parameters:
columnData- the input column data- Returns:
- a columnData x 1 RealMatrix
- Throws:
java.lang.IllegalArgumentException- ifcolumnDatais emptyjava.lang.NullPointerException- ifcolumnDatais null
-
createColumnFieldMatrix
public static <T extends FieldElement<T>> FieldMatrix<T> createColumnFieldMatrix(T[] columnData)
Creates a columnFieldMatrixusing the data from the input array.- Type Parameters:
T- the type of the field elements- Parameters:
columnData- the input column data- Returns:
- a columnData x 1 FieldMatrix
- Throws:
java.lang.IllegalArgumentException- ifcolumnDatais emptyjava.lang.NullPointerException- ifcolumnDatais null
-
createColumnBigMatrix
@Deprecated public static BigMatrix createColumnBigMatrix(double[] columnData)
Deprecated.since 2.0 replaced bycreateColumnFieldMatrix(FieldElement[])Creates a columnBigMatrixusing the data from the input array.- Parameters:
columnData- the input column data- Returns:
- a columnData x 1 BigMatrix
- Throws:
java.lang.IllegalArgumentException- ifcolumnDatais emptyjava.lang.NullPointerException- ifcolumnDatais null
-
createColumnBigMatrix
@Deprecated public static BigMatrix createColumnBigMatrix(java.math.BigDecimal[] columnData)
Deprecated.since 2.0 replaced bycreateColumnFieldMatrix(FieldElement[])Creates a columnBigMatrixusing the data from the input array.- Parameters:
columnData- the input column data- Returns:
- a columnData x 1 BigMatrix
- Throws:
java.lang.IllegalArgumentException- ifcolumnDatais emptyjava.lang.NullPointerException- ifcolumnDatais null
-
createColumnBigMatrix
@Deprecated public static BigMatrix createColumnBigMatrix(java.lang.String[] columnData)
Deprecated.since 2.0 replaced bycreateColumnFieldMatrix(FieldElement[])Creates a columnBigMatrixusing the data from the input array.- Parameters:
columnData- the input column data- Returns:
- a columnData x 1 BigMatrix
- Throws:
java.lang.IllegalArgumentException- ifcolumnDatais emptyjava.lang.NullPointerException- ifcolumnDatais null
-
checkRowIndex
public static void checkRowIndex(AnyMatrix m, int row)
Check if a row index is valid.- Parameters:
m- matrix containing the submatrixrow- row index to check- Throws:
MatrixIndexException- if index is not valid
-
checkColumnIndex
public static void checkColumnIndex(AnyMatrix m, int column) throws MatrixIndexException
Check if a column index is valid.- Parameters:
m- matrix containing the submatrixcolumn- column index to check- Throws:
MatrixIndexException- if index is not valid
-
checkSubMatrixIndex
public static void checkSubMatrixIndex(AnyMatrix m, int startRow, int endRow, int startColumn, int endColumn)
Check if submatrix ranges indices are valid. Rows and columns are indicated counting from 0 to n-1.- Parameters:
m- matrix containing the submatrixstartRow- Initial row indexendRow- Final row indexstartColumn- Initial column indexendColumn- Final column index- Throws:
MatrixIndexException- if the indices are not valid
-
checkSubMatrixIndex
public static void checkSubMatrixIndex(AnyMatrix m, int[] selectedRows, int[] selectedColumns) throws MatrixIndexException
Check if submatrix ranges indices are valid. Rows and columns are indicated counting from 0 to n-1.- Parameters:
m- matrix containing the submatrixselectedRows- Array of row indices.selectedColumns- Array of column indices.- Throws:
MatrixIndexException- if row or column selections are not valid
-
checkAdditionCompatible
public static void checkAdditionCompatible(AnyMatrix left, AnyMatrix right) throws java.lang.IllegalArgumentException
Check if matrices are addition compatible- Parameters:
left- left hand side matrixright- right hand side matrix- Throws:
java.lang.IllegalArgumentException- if matrices are not addition compatible
-
checkSubtractionCompatible
public static void checkSubtractionCompatible(AnyMatrix left, AnyMatrix right) throws java.lang.IllegalArgumentException
Check if matrices are subtraction compatible- Parameters:
left- left hand side matrixright- right hand side matrix- Throws:
java.lang.IllegalArgumentException- if matrices are not subtraction compatible
-
checkMultiplicationCompatible
public static void checkMultiplicationCompatible(AnyMatrix left, AnyMatrix right) throws java.lang.IllegalArgumentException
Check if matrices are multiplication compatible- Parameters:
left- left hand side matrixright- right hand side matrix- Throws:
java.lang.IllegalArgumentException- if matrices are not multiplication compatible
-
fractionMatrixToRealMatrix
public static Array2DRowRealMatrix fractionMatrixToRealMatrix(FieldMatrix<Fraction> m)
- Parameters:
m- matrix to convert- Returns:
- converted matrix
-
bigFractionMatrixToRealMatrix
public static Array2DRowRealMatrix bigFractionMatrixToRealMatrix(FieldMatrix<BigFraction> m)
- Parameters:
m- matrix to convert- Returns:
- converted matrix
-
serializeRealVector
public static void serializeRealVector(RealVector vector, java.io.ObjectOutputStream oos) throws java.io.IOException
Serialize aRealVector.This method is intended to be called from within a private
writeObjectmethod (after a call tooos.defaultWriteObject()) in a class that has aRealVectorfield, which should be declaredtransient. This way, the default handling does not serialize the vector (theRealVectorinterface is not serializable by default) but this method does serialize it specifically.The following example shows how a simple class with a name and a real vector should be written:
public class NamedVector implements Serializable { private final String name; private final transient RealVector coefficients; // omitted constructors, getters ... private void writeObject(ObjectOutputStream oos) throws IOException { oos.defaultWriteObject(); // takes care of name field MatrixUtils.serializeRealVector(coefficients, oos); } private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { ois.defaultReadObject(); // takes care of name field MatrixUtils.deserializeRealVector(this, "coefficients", ois); } }- Parameters:
vector- real vector to serializeoos- stream where the real vector should be written- Throws:
java.io.IOException- if object cannot be written to stream- See Also:
deserializeRealVector(Object, String, ObjectInputStream)
-
deserializeRealVector
public static void deserializeRealVector(java.lang.Object instance, java.lang.String fieldName, java.io.ObjectInputStream ois) throws java.lang.ClassNotFoundException, java.io.IOExceptionDeserialize aRealVectorfield in a class.This method is intended to be called from within a private
readObjectmethod (after a call toois.defaultReadObject()) in a class that has aRealVectorfield, which should be declaredtransient. This way, the default handling does not deserialize the vector (theRealVectorinterface is not serializable by default) but this method does deserialize it specifically.- Parameters:
instance- instance in which the field must be set upfieldName- name of the field within the class (may be private and final)ois- stream from which the real vector should be read- Throws:
java.lang.ClassNotFoundException- if a class in the stream cannot be foundjava.io.IOException- if object cannot be read from the stream- See Also:
serializeRealVector(RealVector, ObjectOutputStream)
-
serializeRealMatrix
public static void serializeRealMatrix(RealMatrix matrix, java.io.ObjectOutputStream oos) throws java.io.IOException
Serialize aRealMatrix.This method is intended to be called from within a private
writeObjectmethod (after a call tooos.defaultWriteObject()) in a class that has aRealMatrixfield, which should be declaredtransient. This way, the default handling does not serialize the matrix (theRealMatrixinterface is not serializable by default) but this method does serialize it specifically.The following example shows how a simple class with a name and a real matrix should be written:
public class NamedMatrix implements Serializable { private final String name; private final transient RealMatrix coefficients; // omitted constructors, getters ... private void writeObject(ObjectOutputStream oos) throws IOException { oos.defaultWriteObject(); // takes care of name field MatrixUtils.serializeRealMatrix(coefficients, oos); } private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { ois.defaultReadObject(); // takes care of name field MatrixUtils.deserializeRealMatrix(this, "coefficients", ois); } }- Parameters:
matrix- real matrix to serializeoos- stream where the real matrix should be written- Throws:
java.io.IOException- if object cannot be written to stream- See Also:
deserializeRealMatrix(Object, String, ObjectInputStream)
-
deserializeRealMatrix
public static void deserializeRealMatrix(java.lang.Object instance, java.lang.String fieldName, java.io.ObjectInputStream ois) throws java.lang.ClassNotFoundException, java.io.IOExceptionDeserialize aRealMatrixfield in a class.This method is intended to be called from within a private
readObjectmethod (after a call toois.defaultReadObject()) in a class that has aRealMatrixfield, which should be declaredtransient. This way, the default handling does not deserialize the matrix (theRealMatrixinterface is not serializable by default) but this method does deserialize it specifically.- Parameters:
instance- instance in which the field must be set upfieldName- name of the field within the class (may be private and final)ois- stream from which the real matrix should be read- Throws:
java.lang.ClassNotFoundException- if a class in the stream cannot be foundjava.io.IOException- if object cannot be read from the stream- See Also:
serializeRealMatrix(RealMatrix, ObjectOutputStream)
-
-